在Android中无法将单选按钮setchecked设置为true

时间:2014-09-19 07:14:09

标签: java android checkbox radio-button

我正在尝试使用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会起作用,但在单选按钮上设置时同样不起作用。

2 个答案:

答案 0 :(得分:2)

您可能导致无限循环和堆栈溢出。 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;
    }
}

答案 1 :(得分:0)

请尝试这种方式,希望这有助于您解决问题。

如果条件工作为true或false,那么当你得到isChecked()时已经返回true或false所以不需要检查(== true)你在代码中做错的事情。

<强> activity_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">

    <RadioButton
        android:id="@+id/radioButton1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Set me" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="radioCheck"
        android:layout_marginTop="10dp"
        android:text="On/ Off" />

</LinearLayout>

<强> MainActivity.java

public class MainActivity extends Activity {

    private RadioButton radioButton1;
    private Button button2;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        radioButton1 = (RadioButton) findViewById(R.id.radioButton1);
        button2 = (RadioButton) findViewById(R.id.button2);
    }

    public void radioCheck(View v) {
        if (radioButton1.isChecked()) {
            radioButton1.setChecked(false);
        }
        else {
            radioButton1.setChecked(true);
        }
    }

}