1


我在一个活动中有 16 个复选框,用户必须从中选择 8 个复选框中的任何一个。
因此,最终用户将选择其中 16 个复选框中的 2 个。

更新:复选框已经存在于 xml 布局文件中。所以,我确实可以访问他们的 ID

直到现在,我正在考虑实现一个简单的 onCheckedChange 侦听器,并在 switch case 块中选择 8 个复选框中的任何 1 个复选框并取消选择其余 7 个。但是这种方法是极其痛苦的。

此外,当我需要提取其中哪个被选中时,那将是一团糟。

那么,我可以做这两件事的最简单但灵活的方法是什么?欢迎提出建议
谢谢

4

2 回答 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 回答