从编程视图中获取 Id

Getting Id from programmatically view

这是一个示例尝试代码。我正在使用循环在 table 行中添加复选框和文本视图。一切工作正常,除了每当我试图从另一种方法中取出(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. 您的意见字段
  2. 使用 findViewById
  3. 在 之前调用 setContentView
  4. final 您尝试在匿名 class(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]);
                    }
                }
            }
        });
    }
}