选择另一个时取消选中复选框

Un-check Checkbox when selecting another

我知道这听起来很简单,但听我说完。我有 2 个复选框,选中其中一个后我想取消选中另一个。

我试过以下方法:

CheckBox chk1, chk2;

if (chk1.isChecked()) {
    chk2.setChecked(false);
}

if (chk2.isChecked()) {
    chk1.setChecked(false);
}

我也试过:

chk1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
        chk2.setChecked(false);
    }
});

chk2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
        chk1.setChecked(false);
    }
});

我知道我应该改用切换按钮,但复选框与设计相得益彰,所以我正在寻找一种方法来实现它。

有什么想法吗?

我认为在设计方面,复选框用于让用户选择多个选项。我认为你应该尝试使用 radioputton,这里是 link:

Radiobutton reference

多亏了 @NoEm 我设法让它工作,但实现 OnClickListener 是这样的:

chk1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        chk1.setChecked(true);
        chk2.setChecked(false);
    }
});
chk2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        chk2.setChecked(true);
        chk1.setChecked(false);
    }
            });

两种变体: 首先是Java

final CheckBox cb1 = findViewById(R.id.checkBox1);
    final CheckBox cb2 = findViewById(R.id.checkBox2);
    cb1.setChecked(true);

    cb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
            cb2.setChecked(!isChecked);
        }
    });

    cb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
            cb1.setChecked(!isChecked);
        }
    });

或 Kotlin 作为第二

val cb1 = this.findViewById<CheckBox>(R.id.checkBox1)
    val cb2 = this.findViewById<CheckBox>(R.id.checkBox2)

    cb1.isChecked = true

    cb1.setOnCheckedChangeListener { _, isChecked ->  cb2.isChecked = !isChecked }
    cb2.setOnCheckedChangeListener { _, isChecked ->  cb1.isChecked = !isChecked }