我在一个活动中有 16 个复选框,用户必须从中选择 8 个复选框中的任何一个。
因此,最终用户将选择其中 16 个复选框中的 2 个。
更新:复选框已经存在于 xml 布局文件中。所以,我确实可以访问他们的 ID
直到现在,我正在考虑实现一个简单的 onCheckedChange 侦听器,并在 switch case 块中选择 8 个复选框中的任何 1 个复选框并取消选择其余 7 个。但是这种方法是极其痛苦的。
此外,当我需要提取其中哪个被选中时,那将是一团糟。
那么,我可以做这两件事的最简单但灵活的方法是什么?欢迎提出建议
谢谢
问问题
5139 次
2 回答
5
您可以一次只CheckBox
检查一个(类似于 a RadioGroup
),方法是将它们分组到一个数组中(以便于访问和处理),并OnClickListener
为每个设置 a 以设置状态:
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);
}
}
}
};
于 2013-01-09T15:30:38.180 回答
0
只需给他们简单的名称,例如 list1box1 list1box2 .... list2box1 list2box2 ... 有两个名称数组 - list1array - list2array
仍然拥有与现在相同的侦听器:在侦听器内部首先执行 if 语句以检查单击的项目是 list1 项目还是 list2 并基于此简单地有一个 for 循环,该循环遍历该特定列表中的所有项目和选中/取消选中。
提取只需检查每个数组哪些项目被检查或不检查
于 2013-01-08T14:41:53.037 回答