我在一个活动中有16个复选框,用户必须从中选择8个复选框中的任意一个。
因此,最终用户将从16个复选框中选择2个复选框。
更新: xml布局文件中已经存在复选框。所以,我确实可以访问他们的ID了。到现在为止,我正在考虑实现一个简单的onCheckedChange监听器,并在一个switch case块中选择8个复选框中的任意一个复选框,并取消选择其余7个复选框。但这种方法非常痛苦。
另外,当我需要提取哪一个被选中时,那将是一个完整的混乱。
那么,我能做到的最简单而灵活的方法是什么这些东西?欢迎提出建议。谢谢
答案 0 :(得分:4)
您可以一次只检查一个CheckBox
(类似于RadioGroup
),方法是将它们分组在一个数组中(以便于访问和处理),并将OnClickListener
设置为每一个都设置状态:
CheckBox[] chkArray = new CheckBox[8];
chkArray[0] = (CheckBox) findViewById(R.id.cb1R1);
chkArray[0].setOnClickListener(mListener);
chkArray[1] = (CheckBox) findViewById(R.id.cb2R1); // what id do you have?
chkArray[1].setOnClickListener(mListener);
// so on for the rest of the 8 CheckBoxes
private OnClickListener mListener = new OnClickListener() {
@Override
public void onClick(View v) {
final int checkedId = v.getId();
for (int i = 0; i < chkArray.length; i++) {
final CheckBox current = chkArray[i];
if (current.getId() == checkedId) {
current.setChecked(true);
} else {
current.setChecked(false);
}
}
}
};
答案 1 :(得分:0)
给他们简单的名字,如list1box1 list1box2 .... list2box1 list2box2 ... 有两个名称数组 - list1array - list2array
仍然拥有与现在相同的侦听器: 在侦听器内部首先执行if语句来检查单击的项是否是list1项或list2,并且基于该语句只需要一个for循环,循环遍历该特定列表中的所有项并检查/取消选中。
提取只检查每个数组是否检查了哪些项目