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

How to make all checkboxes unchecked with a certain condition? Android

我有 45 个复选框供您选中。我想要做的是,如果您尝试 select 超过 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;

这里的问题是您对找到已选中复选框的反应。我们需要考虑删除 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(stopped)

注 3: 这就是 "else" 的设计目的。 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--;也类似(如评论你的问题)