【问题标题】:Selecting one Checkbox out of multiple checkboxes & getting user selected Checkbox从多个复选框中选择一个复选框并让用户选中复选框
【发布时间】:2012-12-22 09:51:34
【问题描述】:


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

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

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

另外,当我需要提取它们中的哪一个被选中时,那将是一团糟。

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

【问题讨论】:

  • 使用两组RadioGroup,每组包含8个radioButtons
  • 广播组是这种情况下的正确选择。两组单选组,每组有 8 个单选按钮!
  • @Houcine & @Gridtestmail 感谢您的回复。我正在使用复选框并且不想使用RadioGroup。我知道它的使用方式很简单。但我只想坚持复选框......现在:D
  • 那么不幸的是你必须单独做!

标签: android checkbox android-checkbox


【解决方案1】:

您可以一次只检查一个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);
            }
       }    
    }
};

【讨论】:

  • @IntelliJAmiya 使用 ... if (current.getId() == checkedId) { current.setChecked(current.isChecked()); } ... .
  • 你的逻辑帮助了我。
【解决方案2】:

只需给它们简单的名称,例如 list1box1 list1box2.... list2box1 list2box2... 名称有两个数组 - list1array - list2array

仍然有和现在一样的听众: 在侦听器内部,首先执行 if 语句来检查单击的项目是 list1 项目还是 list2,并基于此简单地有一个 for 循环,该循环遍历该特定列表中的所有项目并检查/取消选中。

提取只是检查每个数组哪些项目被检查或不检查

【讨论】:

  • 感谢您的回复。 Here (PasteBin Link) 是我目前的实现。你能详细说明我的代码吗?我觉得你谈到的第一个if 可以检查它所属的list array 的项目但是 for 循环遍历特定列表中的所有项目并选中一个框/取消选中所有其他框是不可能的?
  • nvm 我有一个答案。我以最简单但痛苦的方式实现它。
猜你喜欢
  • 2014-10-07
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-24
相关资源
最近更新 更多