【问题标题】:If statement for two checkboxes are checked problem如果两个复选框的语句被选中问题
【发布时间】:2019-12-19 20:53:45
【问题描述】:

我正在尝试编写一段代码,指出如果选中一个复选框,则不能同时选中第二个复选框。 我有一个名为 dayShift 的复选框和另一个名为 nightShift 的复选框。 如果我正在检查 nightShift 和 THEN dayShift,则代码按预期工作。但是,如果我先检查 dayShift,然后检查 nightShift,则代码不适用。

public void days(View view) {
    CheckBox nightShift_check = (CheckBox)findViewById(R.id.nightShift);
    CheckBox dayShift_check = (CheckBox)findViewById(R.id.dayShift);
    if (nightShift_check.isChecked() && dayShift_check.isChecked())
    {
        nightShift_check.setChecked(false);
        dayShift_check.setChecked(false);
        Toast.makeText(mainApplication.this,"Error message",Toast.LENGTH_LONG).show();
    }
}

【问题讨论】:

  • 你为什么不用RadioButton
  • 添加您的要求的完整代码,哪些是有效的,哪些是无效的
  • 方法 days() 是一个或两个复选框的侦听器吗?

标签: java android if-statement conditional-statements


【解决方案1】:

如果您需要为此执行不同的逻辑,您可以使用RadioButton,这样就不能同时有两条语句为真。

否则,您可以在 CheckBox 上添加名为 setOnCheckedChangeListener 的内容,然后如果它们都被选中,则取消选中它们,例如:

dayShift_check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked && nightShift_check.isChecked()) {
            dayShift_check.setChecked(false);
            nightShift_check.setChecked(false);
        }
    }
});

但我仍然强烈建议您使用RadioButton,如果您需要从两个中进行选择,就像上面评论部分中提到的@NileshRathod。 如果您需要从多个选项中选择一个,您可能需要使用RadioGroup

【讨论】:

    【解决方案2】:

    您应该在 CheckBox 上使用监听器来获取每次点击时的状态:

    nightShift_check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                dayShift_check.setChecked(!isChecked);
            }
        });
    
    dayShift_check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                nightShift_check.setChecked(!isChecked);
            }
        });
    

    当一个有状态时,另一个有相反的状态。 希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-10-06
      • 1970-01-01
      • 2020-05-25
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 2016-03-04
      • 2013-03-20
      • 1970-01-01
      相关资源
      最近更新 更多