如何在一定条件下取消选中所有复选框? Android的

时间:2015-04-03 08:17:29

标签: android checkbox

我有45个复选框,您可以检查。我想要做的是,如果您尝试选择超过6个复选框,它将自动禁用所有按钮,但是,如果您点击已选中的复选框,它将使所有复选框都可以检查。这听起来很简单,但我无法实现这种方法。如果这里的专业人士可以帮助像我这样的菜鸟,我将不胜感激。这是示例代码。

            checkbox[i].setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if (isChecked) { buttonView.setTextColor(Color.GREEN); 

                    buttonClicked.add(buttonView.getText().toString());
                    buttonView.setTextSize(18);

                    count+=1;

                    if(count>=6){

                        for(int i = 0; i< 43;i++){

                         checkbox[i].setEnabled(false);
                         stopped =  checkbox[i].isChecked();
                         if(stopped==true){
                             for(int a = 0; a < checkbox.length;a++){
                                 checkbox[a].setEnabled(true);
                             }
                             }



                        }

                    }
                    }
                    if (!isChecked) {buttonView.setTextColor(Color.BLACK); 

                        buttonClicked.remove(buttonView.getText().toString());
                         buttonView.setTextSize(15);
                         count-=1;

1 个答案:

答案 0 :(得分:1)

您的问题是您对查找复选框的反应。我们需要考虑删除if(stopped==true)下的内部循环(注2)。 你只需要

if(stopped){
    checkbox[i].setEnabled(true);
}

然后在你的if(!isChecked)(注释3)中,重新添加循环以重新启用所有复选框,使其看起来像

if(!isChecked){
//your existing code
    for(int i=0;i<checkbox.length;i++){
        checkbox[i].setEnabled(true);
    }
}

注1:我建议您将硬编码的“43”换成checkbox.length,以保持清洁。

注意2:你不需要把== true,它已经是一个布尔值,所以这可以是if(已停止)

注3:这就是“其他”的目的。 if(...){} if(!...){}与if(...){} else {}同义。

注4:为了消除不必要的循环(总是很好的做法),我们应该在for循环之前添加另一个检查,以确保有6个盒子处于活动状态。

if(count>=6){
    for(int i=0;i<checkbox.length;i++){
        checkbox[i].setEnabled(true);
    }
}
count--;

注意5: x+=1;可以替换为x++;x-=1; x--;也可以替换(如您问题的评论中所述)