在CheckBox
语句中使用else if
时遇到问题。我有一个CheckBox
列表,如:
cbapel, cbmangga, cbjeruk, cbbelimbing.
当勾选复选框cbapel
,cbmangga
和cbjeruk
时,结果为“2”而不是“4”。解决方案是什么?
if(MainActivity.cbapel.isChecked() && MainActivity.cbbelimbing.isChecked()) {
tx.setText("1");}
else if(MainActivity.cbapel.isChecked() && MainActivity.cbjeruk.isChecked()) {
tx.setText("2");}
else if(MainActivity.cbapel.isChecked() && MainActivity.cbmangga.isChecked()) {
tx.setText("3");}
else if(MainActivity.cbapel.isChecked() && MainActivity.cbmangga.isChecked() && MainActivity.cbjeruk.isChecked()) {
tx.setText("4");}
else {
tx.setText("NOT FOUND");
}
答案 0 :(得分:1)
else if(MainActivity.cbapel.isChecked() && MainActivity.cbjeruk.isChecked()) {
让我们来看看......
MainActivity.cbapel.isChecked()
?是
MainActivity.cbjeruk.isChecked()
?是
因此,此评估结果为true
,因此不会检查任何其他条件语句。
这种逻辑有许多不同的流动方式。但是,要知道什么是最适合您的情况,取决于这些变量实际上意味着以及您正在做什么。
我可以从您提供的内容中获得的最佳建议是先检查过滤最多的情况。所以......
if(MainActivity.cbapel.isChecked() && MainActivity.cbmangga.isChecked()
&& MainActivity.cbjeruk.isChecked()) {
tx.setText("4");
}
然后在其后添加else if
以进行其他检查。
此外,cricket在his comment中提出了一个很好的建议,即每次都检查相同的条件,因此您可以将其删除并将其全部包装在一个if
中以删除一些重复项。< / p>
答案 1 :(得分:1)
到目前为止,您真的忽略了这个简单的解决方案(假设您只计算复选框的数量)
int checked = 0;
if (MainActivity.cbapel.isChecked()) {
checked++;
}
if (MainActivity.cbbelimbing.isChecked()) {
checked++;
}
if (MainActivity.cbmangga.isChecked()) {
checked++;
}
if (MainActivity.cbjeruk.isChecked()) {
checked++;
}
if (checked == 0) {
tx.setText("NOT FOUND");
} else {
tx.setText(String.valueOf(checked));
}
如果您不想计算复选框,那么我认为这与您在问题中尝试的逻辑相同,但会考虑输入一个条件。
String value = "";
boolean bool1 = MainActivity.cbapel.isChecked();
boolean bool2 = MainActivity.cbbelimbing.isChecked();
boolean bool3 = MainActivity.cbmangga.isChecked();
boolean bool4 = MainActivity.cbjeruk.isChecked();
if (bool1) {
if (bool3 && bool4) {
value = "4";
} else if (bool3 && !bool4) {
value = "3";
} else if (!bool3 && bool4) {
value = "2";
}
if (value.isEmpty() && bool2) {
value = "1";
}
} else {
value = "NOT FOUND";
}
tx.setText(value.isEmpty() ? "NOT FOUND" : value);
答案 2 :(得分:0)
将此侦听器用于每个复选框并相应地设置条件
类CheckboxListeners实现了CompoundButton.OnCheckedChangeListener {
private CheckBox checkbox;
CheckboxListeners(CheckBox checkbox) {
this.checkbox = checkbox;
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checkbox.setChecked(isChecked);
}
}