Это пример кода для проверки. Я добавляю checkbox и textview в строку таблицы, используя цикл. Все работает нормально, за исключением того, что всякий раз, когда я пытаюсь извлечь (checkBox, Textview) из другого метода, я не могу его получить. Я не знаю, как это решить. Я попробовал setId, но я не смог получить идентификатор.Получение идентификатора из программного представления
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]);
}
}
}
});
Вы должны переместить 'TableLayout tl' в поле в верхней части вашего класса. Затем вы можете использовать эту переменную внутри вашего onClickListener. –
Если я переведу его сверху, тогда я получу NPE, который я не знаю почему, но этот способ, похоже, исправить. – user3900009
Вам все равно нужно будет сделать tl = (TableLayout) findViewById (R.id.tableLayout1); '. –