if else语句与Checkbox没有按预期执行

时间:2016-02-12 05:14:20

标签: android checkbox

CheckBox语句中使用else if时遇到问题。我有一个CheckBox列表,如:

cbapel, cbmangga, cbjeruk, cbbelimbing.

当勾选复选框cbapelcbmanggacbjeruk时,结果为“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");
 }

3 个答案:

答案 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以进行其他检查。

此外,crickethis 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);

    }


}