解决检查一个框并取消选中另一个框

时间:2016-07-05 21:59:53

标签: android xml checkbox

我试图让我的两个复选框具有单独的值,当选中一个时,另一个未选中。我可以使用以下方式完成此任务:

 final CheckBox checkYes = (CheckBox) findViewById(R.id.visual_yes);
        final CheckBox checkNo = (CheckBox) findViewById(R.id.visual_no);

        CompoundButton.OnCheckedChangeListener checker = new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (checkYes.isChecked() ) {

                    checkNo.setChecked(false);
//                    finish();
                }
                else if (checkNo.isChecked()) {
                    checkYes.setChecked(false);

//                    finish();
                }
                savePrefs("checkYesVisual", checkYes.isChecked());
                savePrefs("checkNoVisual",checkNo.isChecked());
            }
        };
        checkYes.setOnCheckedChangeListener(checker);
        checkNo.setOnCheckedChangeListener(checker);
    }

但我的问题是我按下的第一个按钮是唯一一个按照它应该工作的按钮。例如,如果我先按是,然后在没有切换之后按否。但是,如果我按否,然后是,检查开关(我想要)。

我认为我的问题是在单击是时将checkNo文本框设置为false,并且该值只是保存,直到取消选中yes框。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

正如Ismael所说,您正在寻找的行为是一个带有单选按钮的Radio组。只能检查一个,它会自动取消选中其他一个。

<?xml version="1.0" encoding="utf-8"?>

<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <RadioButton android:id="@+id/radio_pirates"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/pirates"
        android:onClick="onRadioButtonClicked"/>

    <RadioButton android:id="@+id/radio_ninjas"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/ninjas"
        android:onClick="onRadioButtonClicked"/>
</RadioGroup>

如果符合您的需要,请不要将其检查为答案。要求Ismael写下他的评论作为答案,因为他会失去所有的功劳。

答案 1 :(得分:0)

您可以使用单选按钮组

获取此行为