如何在特定条件下取消选中所有复选框? 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--;
也类似(如评论你的问题)
我有 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--;
也类似(如评论你的问题)