146

我已经创建 RadioGroupRadioButton动态如下:

RadioGroup radioGroup = new RadioGroup(context);
                    RadioButton radioBtn1 = new RadioButton(context);
                    RadioButton radioBtn2 = new RadioButton(context);
                    RadioButton radioBtn3 = new RadioButton(context);

                    radioBtn1.setText("Less");
                    radioBtn2.setText("Normal");
                    radioBtn3.setText("More");

                    radioBtn2.setChecked(true);

                    radioGroup.addView(radioBtn1);
                    radioGroup.addView(radioBtn2);
                    radioGroup.addView(radioBtn3);

此处始终检查步骤radioBtn2.setChecked(true);原因。radioBtn2这意味着我不能通过选中radioBtn2其他两个单选按钮 ( radioBtn1, radioBtn3) 来取消选中。我想让它RadioGroup一次只能检查一个单选按钮(现在它可以一次检查两个单选按钮)。

我怎么解决这个问题?

4

8 回答 8

246

您应该像这样检查 radiogroup 中的单选按钮:

radiogroup.check(IdOfYourButton)

当然,您首先必须为您的单选按钮设置一个 Id

编辑:我忘了,radioButton.getId()也可以,谢谢 Ramesh

编辑2:

android:checkedButton="@+id/my_radiobtn"

在无线电组 xml 中工作

于 2012-02-07T11:47:40.467 回答
117

如果是 xml 属性,它android:checkedButton需要检查id的。RadioButton

<RadioGroup
...
...
android:checkedButton="@+id/IdOfTheRadioButtonInsideThatTobeChecked"
... >....</RadioGroup>
于 2013-08-25T09:48:36.887 回答
57

在 XML 文件中,使用您的默认 id设置您的android:checkedButton字段:RadioGroupRadioButton

<RadioGroup
    ....
    android:checkedButton="@+id/button_1">

    <RadioButton
        android:id="@+id/button_1"
        ...../>

    <RadioButton
        android:id="@+id/button_2"
        ...../>

    <RadioButton
        android:id="@+id/button_3"
        ...../>
</RadioGroup>
于 2014-02-18T01:08:19.043 回答
20
    RadioGroup radioGroup = new RadioGroup(WvActivity.this);
    RadioButton radioBtn1 = new RadioButton(this);
    RadioButton radioBtn2 = new RadioButton(this);
    RadioButton radioBtn3 = new RadioButton(this);

    radioBtn1.setText("Less");
    radioBtn2.setText("Normal");
    radioBtn3.setText("More");


    radioGroup.addView(radioBtn1);
    radioGroup.addView(radioBtn2);
    radioGroup.addView(radioBtn3);

    radioGroup.check(radioBtn2.getId());
于 2012-02-07T11:54:54.793 回答
6
RadioGroup radioGroup = new RadioGroup(context);
RadioButton radioBtn1 = new RadioButton(context);
RadioButton radioBtn2 = new RadioButton(context);
RadioButton radioBtn3 = new RadioButton(context);

radioBtn1.setText("Less");
radioBtn2.setText("Normal");
radioBtn3.setText("More");

radioGroup.addView(radioBtn1);
radioGroup.addView(radioBtn2);
radioGroup.addView(radioBtn3);
radioBtn2.setChecked(true);
于 2012-08-02T05:55:15.550 回答
3

我同事的代码也有同样的问题。这听起来是因为您的单选按钮未正确设置您的单选组。这就是您可以多选单选按钮的原因。我尝试了很多东西,最后我做了一个实际上是错误的技巧,但效果很好。

for ( int i = 0 ; i < myCount ; i++ )
{
    if ( i != k )
    {
        System.out.println ( "i = " + i );
        radio1[i].setChecked(false);
    }
}

在这里,我设置了一个 for 循环,它检查可用的单选按钮并取消选择除新单击的单选按钮之外的所有单选按钮。尝试一下。

于 2012-02-07T12:00:10.457 回答
0

这是 RadioGroup 的错误

RadioButton radioBtn2 = new RadioButton(context);

radioBtn2 没有 viewId,generateViewId 在 onChildViewAdded()

public void onChildViewAdded(View parent, View child) {
    if (parent == RadioGroup.this && child instanceof RadioButton) {
        int id = child.getId();
        // generates an id if it's missing
        if (id == View.NO_ID) {
            id = View.generateViewId();
            child.setId(id);
        }
        ((RadioButton) child).setOnCheckedChangeWidgetListener(
                mChildOnCheckedChangeListener);
    }

    if (mOnHierarchyChangeListener != null) {
        mOnHierarchyChangeListener.onChildViewAdded(parent, child);
    }
}

所以,首先是radioGroup.addView(radioBtn2),然后是radioBtn2.setChecked(true);

像这样:

RadioGroup radioGroup = new RadioGroup(context);
RadioButton radioBtn1 = new RadioButton(context);
RadioButton radioBtn2 = new RadioButton(context);
RadioButton radioBtn3 = new RadioButton(context);

radioBtn1.setText("Less");
radioBtn2.setText("Normal");
radioBtn3.setText("More");

radioGroup.addView(radioBtn1);
radioGroup.addView(radioBtn2);
radioGroup.addView(radioBtn3);

radioBtn2.setChecked(true);
于 2016-06-29T10:19:54.517 回答
0

添加android:checked = "true"你的activity.xml

于 2018-02-03T19:29:27.823 回答