从编程方式查看Id

时间:2015-12-15 15:54:48

标签: java android android-view

这是一个示例代码。我通过使用循环在表行中添加checkbox和textview。一切正常,但每当我试图从另一种方法中取出(checkBox,Textview)时,我都无法得到它。我不知道如何解决这个问题。我尝试过setId,但我无法获得Id。

 protected void onCreate(Bundle savedInstanceState) {
    TableLayout tl = (TableLayout)findViewById(R.id.tableLayout1);
    TableRow[] row = new TableRow[5];
    TextView tv[] = new TextView[5];
    CheckBox[] cb = new CheckBox[5];
    Button clickTestRow;

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    for(int j = 0; j < 5; j ++){
        row[j] = new TableRow(this);
        tl.addView(row[j]);
        tv[j] = new TextView(this);
        cb[j] = new CheckBox(this);

        tv[j].setText("This is text");

        row[j].addView(cb[j]);
        row[j].addView(tv[j]);

        if(j == 0)
            cb[j].setChecked(true);

    }

    clickTestRow = (Button) findViewById(R.id.clickTestRow);

    clickTestRow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    TableLayout tlid = (TableLayout) findViewById(R.id.tableLayout1);
            for(int i = 0; i < 5; i ++){
                if(cb[i].isChecked()){
                    tlid.removeView(row[i]);
                }
            }
        }
    });

1 个答案:

答案 0 :(得分:0)

这是未经测试的,但现在尝试一下。

这里的关键点是

  1. 您的观点的字段
  2. 使用setContentView
  3. 在之前致电findViewById 您尝试在匿名类中使用的
  4. final变量(onClickListener)
  5. public class MainActivity extends Activity {
    
        private TableLayout tl;
        private Button clickTestRow;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            tl = (TableLayout)findViewById(R.id.tableLayout1);
            clickTestRow = (Button) findViewById(R.id.clickTestRow);
    
            final TableRow[] row = new TableRow[5];
            final TextView tv[] = new TextView[5];
            final CheckBox[] cb = new CheckBox[5];
    
            for(int j = 0; j < 5; j ++){
                row[j] = new TableRow(this);
                tl.addView(row[j]);
                tv[j] = new TextView(this);
                cb[j] = new CheckBox(this);
    
                tv[j].setText("This is text");
    
                row[j].addView(cb[j]);
                row[j].addView(tv[j]);
            }
            cb[0].setChecked(true);
    
            clickTestRow.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    for(int i = 0; i < 5; i ++){
                        if(cb[i].isChecked()){
                            tl.removeView(row[i]);
                        }
                    }
                }
            });
        }
    }