首页 > 解决方案 > 优化代码 - 从数组创建自定义文本视图并赋值

问题描述

此代码生成一些文本视图并使用数组为其赋值。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_create_list);

    LinearLayout myLayout = (LinearLayout) findViewById(R.id.llContainer2);
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT,    LinearLayout.LayoutParams.WRAP_CONTENT);
    int textViewCount = 24;
    TextView[] pairs=new TextView[textViewCount];
    for(int i=0; i<textViewCount; i++)
    {
        pairs[i] = new TextView(this);
        pairs[i].setLayoutParams(lp);
        pairs[i].setId(i);

        pairs[i].setText(getString(R.string.t1));
        //--------------------
        pairs[i].setClickable(true);
        pairs[i].setOnClickListener(this);
        pairs[i].setTextColor(Color.parseColor("#4682B4"));
        pairs[i].setTextSize(TypedValue.COMPLEX_UNIT_DIP, 21);
        pairs[i].setPadding(8,8,8,8);
        //------------------
        myLayout.addView(pairs[i]);
}}

我在 //-- 和 //-- 中发现这些代码是重复的。我正在寻找优化它的方法。我的想法 1. 在循环内膨胀 textview 布局并使用 customlayout.xml 2. 在开始时设置一次布局,因此它固有的布局来自父

试过了

LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

查看子 = getLayoutInflater().inflate(R.layout.style_textview, null);

myLayout.addView(child);

//------------------------------------------

LinearLayout 容器 = (LinearLayout) findViewById(R.id.llContainer);

查看 inflatedLayout= getLayoutInflater().inflate(R.layout.style_textview, null);

container.addView(inflatedLayout);

任何人都可以向我展示如何使用循环内的 xml 或膨胀父级。

其次,如何使用

public void onClick(View v) {
        switch (v.getId()){ 
            case R.id.i:
                //start activity
}}

我愿意接受更好的建议。

标签: android

解决方案


像这样膨胀视图:

pairs[i] = (TextView) LayoutInflater.from(this).inflate(R.layout. style_textview, myLayout, false);

// Don't set Id by a code-defined value like this, use setTag for additional data or use View.generateViewId()
pairs[i].setId(i);

pairs[i].setText(getString(R.string.t1));
pairs[i].setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
        // Do stuff
    }
}
myLayout.addView(pairs[i]);

LayoutParams其他属性在xml中定义


推荐阅读