选择其他

时间:2018-05-04 08:17:14

标签: java android android-checkbox

我知道这听起来很简单,但是听我说。我有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);
    }
});

我知道我应该使用切换按钮,但是复选框适用于设计,因此我正在寻找一种方法来实现这一功能。

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

我认为在设计方面,复选框适用于您希望让用户选择多个选项的时间。我认为你应该尝试使用的是radioputton,这是一个链接:

Radiobutton reference

答案 1 :(得分:0)

感谢@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);
    }
            });

答案 2 :(得分:0)

两种变体: 首先是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 }