for 循环中 if 语句中的复选框反向工作
Checkboxes in if statement inside a for loop work in reverse
我有一个 for 循环,它在 table 布局中的每个 table 行中显示 2 个文本视图和一个复选框。我有一个 if 语句,它显示了一个 toast 来测试复选框的 isChecked 函数,但是 if 语句相反地工作,除了最后的 table 行。为什么会这样,我该如何解决?
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() ;
}
非常感谢任何帮助!
在当前实现中 checkBox
保存在 for loop
的最后一次迭代期间创建的最后一个 CheckBox 对象,因此使用 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
以便能够从匿名 class.[=12= 中使用它]
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
{
}
}
});
我有一个 for 循环,它在 table 布局中的每个 table 行中显示 2 个文本视图和一个复选框。我有一个 if 语句,它显示了一个 toast 来测试复选框的 isChecked 函数,但是 if 语句相反地工作,除了最后的 table 行。为什么会这样,我该如何解决?
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() ;
}
非常感谢任何帮助!
在当前实现中 checkBox
保存在 for loop
的最后一次迭代期间创建的最后一个 CheckBox 对象,因此使用 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
以便能够从匿名 class.[=12= 中使用它]
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
{
}
}
});