我有一系列复选框,所有复选框都需要OnClickListener来查看它们何时被选中/取消选中。这就是我所拥有的:
CheckBox[] sens = new CheckBox[3];
for (int i = 0; i < 3; i++)
{
cb = new CheckBox(this);
cb.setText(strings[i]);
cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (cb.isChecked()) {
System.out.println("Checked");
} else {
System.out.println("Unchecked");
}
}
});
sens[i] = cb;
mainlayout.addView(sens[i]);
}
但是显示器/控制台只打印&#34;未选中&#34;,无论是否检查过。有没有更好的方法来做到这一点?复选框必须是动态的
答案 0 :(得分:1)
您应该使用setOnCheckedChangeListener
方法而不是setOnClickListener
,并且可以使用setTag
方法设置位置/ ID来处理复选框。
文档:注册当此按钮的选中状态发生变化时要调用的回调。
private void createCheckBoxes(final int count) {
for (int i = 0;i < count; i++) {
final CheckBox checkBox = createCheckBox(this, strings[i], i);
mainlayout.addView(checkBox);
}
}
private CheckBox createCheckBox(final Context context, final String text, final int id) {
final CheckBox checkBox = new CheckBox(context);
checkBox.setTag(id);
checkBox.setText(text);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(final CompoundButton buttonView, final boolean isChecked) {
if (isChecked) {
System.out.println("Checked");
} else {
System.out.println("Unchecked");
}
}
});
return checkBox;
}