我试图使用setChecked()使单选按钮切换。

setChecked(false)可以正常工作,但是setChecked(true)不起作用。

还尝试过toggle(),即使这样也不会取消选中单选按钮。

我需要不使用无线电组的解决方案。只需单击一个单选按钮,即可切换其状态。

MainActivity.java

public void radioCheck(View v) {
    System.out.println("radioCheck");
    RadioButton rb = (RadioButton) findViewById(R.id.radioButton1);

//rb.toggle();

    if (rb.isChecked() == true) {
        rb.setChecked(false);
    }
    else {
        rb.setChecked(true);
    }
}


activity_main.xml

<RadioButton
    android:id="@+id/radioButton1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/button1"
    android:layout_centerHorizontal="true"
    android:onClick="radioCheck"
    android:text="Set me" />

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/radioButton1"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="39dp"
    android:onClick="radioCheck"
    android:text="On/ Off" />


令人惊讶的是,当使用一个按钮取消选中单选按钮时,setChecked可以工作,但是在单选按钮上进行设置时,setChecked不起作用。

最佳答案

您正在造成无限循环和堆栈溢出。 setChecked都是不必要的,您不需要自己切换。 onClick用于对新选择做出反应,而不是自己检查/取消选中它。

http://developer.android.com/guide/topics/ui/controls/radiobutton.html

<?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>

public void onRadioButtonClicked(View view) {
    // Is the button now checked?
    boolean checked = ((RadioButton) view).isChecked();

    // Check which radio button was clicked
    switch(view.getId()) {
        case R.id.radio_pirates:
            if (checked)
                // Pirates are the best
            break;
        case R.id.radio_ninjas:
            if (checked)
                // Ninjas rule
            break;
    }
}

10-08 06:21