如何在单选按钮组中将单选按钮设置为默认值?


131

我创建 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通过选中其他两个单选按钮(radioBtn1radioBtn3)取消选中。我想使它一次RadioGroup只能检查一个单选按钮(现在它可以一次检查两个单选按钮)。

我怎么解决这个问题?


你有需要动态吗???
vk Hooda'2

Answers:


217

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

radiogroup.check(IdOfYourButton)

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

编辑:我忘记了, radioButton.getId()以及工作,拉姆什

编辑2:

android:checkedButton="@+id/my_radiobtn"

在radiogroup xml中工作


39
或者,如果您不想对自己的ID进行识别RadioButton并且知道索引,则可以使用((RadioButton)radioGroup.getChildAt(INDEX))。setChecked(true);
Ahmad Kayyali 2013年

17
你不应该那样做。这将导致此问题中描述的“ setChecked”问题。当然,有一些方法可以在没有按钮ID的情况下执行此操作,但是请不要使用“ setChecked() 一种方法” radiogroup.check(((RadioButton)radioGroup.getChildAt(INDEX)).getId())或类似的方法
-Sprigg

1
最好不要忘记调用group.check(button.getId())之前将单选按钮添加到单选按钮组中
tom

1
我不得不这样做是这样的:radioGroup.Check(radioGroup.GetChildAt(0).Id);对于Xamarin.Android用户
马里奥加尔万

112

如果对XML属性的android:checkedButton它接受idRadioButton情况进行检查。

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

50

在XML文件中的设置android:checkedButton您的字段RadioGroup,并使用默认ID RadioButton

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

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());

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);

重要的是在将setChecked()所有单选按钮添加到单选组后使用。然后,radioGroup.check(radioBtn2.getId())这不是必需的
Hartmut Pfitzinger 2014年

3

我的同事的代码中存在相同的问题。这是因为您的单选按钮未正确设置为“单选按钮”。这就是您可以多选单选按钮的原因。我尝试了很多事情,最后我做了一个技巧,实际上是错误的,但是效果很好。

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

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



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);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.