我正在尝试使用if语句来检查复选框是否已设置,但我不知道如何在if语句中定义cb
以使其工作。
当我宣布cb
为局部变量时,我得到了两个错误:
可能已经指定了最终的局部变量cb
无法在基本类型int
上调用isChecked()
private void createCheckboxList(final ArrayList<Integer> items) {
final CheckBox cb;
final LinearLayout ll = (LinearLayout) findViewById(R.id.lila);
for (int i = 0; i < items.size(); i++) {
//here I am getting `The final local variable cb may already have been assigned`
cb = new CheckBox(this);
cb.setText(String.valueOf(items.get(i)));
cb.setId(i);
ll.addView(cb);
}
Button btn = new Button(this);
btn.setLayoutParams(new LinearLayout.LayoutParams(500, 150));
btn.setText("submit");
ll.addView(btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i : items) {
// here I am getting `Cannot invoke isChecked() on the primitive type int
`
if (cb.getId().isChecked()) {
}
}
}
});
}
答案 0 :(得分:3)
您已将变量声明为final(设置后无法更改):
final CheckBox cb;
您需要在该点设置值,或者删除最终修饰符(您的循环将尝试多次分配值)。
至于另一个问题:
if (cb.getId().isChecked())
在.isChecked()
之后添加.getId()
时,这是一种简短的说法,“在第一种方法的返回对象上调用此方法。
错误告诉您该方法不返回对象,而是返回基本类型(int)。您需要在Checkbox对象上调用第二个方法,尝试类似:
((CheckBox)v).isChecked();
或者,如果您已经拥有ID:
((CheckBox) findViewById(id)).isChecked();