从多个复选框中选择一个复选框&获取用户选中的复选框

时间:2013-01-08 14:11:18

标签: android checkbox android-checkbox


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

更新: xml布局文件中已经存在复选框。所以,我确实可以访问他们的ID了。到现在为止,我正在考虑实现一个简单的onCheckedChange监听器,并在一个switch case块中选择8个复选框中的任意一个复选框,并取消选择其余7个复选框。但这种方法非常痛苦。

另外,当我需要提取哪一个被选中时,那将是一个完整的混乱。

那么,我能做到的最简单而灵活的方法是什么这些东西?欢迎提出建议。谢谢

2 个答案:

答案 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循环,循环遍历该特定列表中的所有项并检查/取消选中。

提取只检查每个数组是否检查了哪些项目