Флажки в операторе if внутри цикла for работают в обратном порядке
У меня есть цикл for, который отображает 2 текстовых просмотра и флажок в каждой из моих таблиц в макете таблицы. У меня есть оператор if, который показывает тост для проверки функции isChecked флажка, но оператор if работает обратно, за исключением последней строки таблицы. Почему это так и как мне это исправить?
for (Integer j = 0; j < count; j++)
{
tableRow1 = new TableRow(getApplicationContext());
textViewMaster = new TextView(getApplicationContext());
textViewMaster.setText(c.getString(c.getColumnIndex("StudentID")));
textViewMaster.setPadding(20, 20, 20, 20);
textViewMaster.setTextColor(getResources().getColor(R.color.redactionbar));
textViewMaster.setTextSize(TypedValue.COMPLEX_UNIT_DIP,25);
textViewMaster.setTypeface(null, Typeface.BOLD);
tableRow1.addView(textViewMaster);
textViewMaster2 = new TextView(getApplicationContext());
textViewMaster2.setText(c.getString(c.getColumnIndex("LastName")));
textViewMaster2.setPadding(20, 20, 20, 20);
textViewMaster2.setTextColor(getResources().getColor(R.color.redactionbar));
textViewMaster2.setTextSize(TypedValue.COMPLEX_UNIT_DIP,25);
textViewMaster2.setTypeface(null, Typeface.BOLD);
tableRow1.addView(textViewMaster2);
tableRow1.setClickable(true);
tableRow1.setLongClickable(true);
tableLayout1.setClickable(true);
checkBox = new CheckBox(getApplicationContext());
checkBox.setChecked(true);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b)
{
if (checkBox.isChecked())
{
searchView.setEnabled(false);
arrayList.add(container1);
arrayList2.add(container2);
arrayList3.add(container3);
Toast toast = Toast.makeText(getApplicationContext(),"Its checked", Toast.LENGTH_SHORT);
toast.show();
}
else
{
arrayList.remove(container1);
arrayList2.remove(container2);
arrayList3.remove(container3);
Toast toast = Toast.makeText(getApplicationContext(), "Its not checked", Toast.LENGTH_SHORT);
toast.show();
}
}
});
checkBox.setVisibility(View.VISIBLE);
tableRow1.addView(checkBox);
tableLayout1.addView(tableRow1);
c.moveToNext() ;
}
Любая помощь очень ценится!
2 ответа
В текущей реализации checkBox
удерживать последний объект CheckBox, который создается во время последней итерации for loop
так что используйте второй параметр onCheckedChanged
метод, который если true
означает, что CheckBox отмечен, если не проверен:
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b)
{
if (b){ // or use compoundButton.isChecked()
// code if checkbox is checked
} else{
// code if checkbox is not checked
}
}
Вы должны использовать предложение в другом ответе, но это также будет работать и будет техникой, которую вы будете использовать, когда у вас нет параметра, который вы можете использовать:
Создайте новую локальную переменную, а не поле, поэтому отличается для каждого цикла и пометить как final
чтобы иметь возможность использовать его из анонимного класса.
final CheckBox checkBox = new CheckBox(getApplicationContext());
//rest is same
checkBox.setChecked(true);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b)
{
if (checkBox.isChecked())
{
}
else
{
}
}
});