我正在尝试编写一条代码,指出如果选中了一个复选框,则不能同时选中第二个复选框。 我有一个复选框,名为dayShift,另一个名为nightShift。 如果我正在检查nightShift和THEN dayShift,则代码将按预期工作。但是,如果我先检查dayShift和THEN 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();
}
}
答案 0 :(得分:0)
如果您需要为此执行不同的逻辑,则可以使用RadioButton
,这样就不能同时有两个语句为真。
否则,您可以在setOnCheckedChangeListener
上添加称为CheckBox
的内容,并如果同时选中了两者,则取消选中它们,例如:
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
。
答案 1 :(得分:0)
您应该在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);
}
});
当一个处于一种状态时,另一个处于相反的状态。 希望对您有所帮助。