我有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;
答案 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--;
也可以替换(如您问题的评论中所述)