RadioGroup:如何以编程方式检查

时间:2011-10-12 16:18:41

标签: android radio-group

我从XML创建一个RadioGroup

    <RadioGroup android:id="@+id/option" 
        android:layout_width="match_parent"
        android:orientation="horizontal" 
        android:checkedButton="@+id/block_scenario_off"
        android:layout_height="wrap_content">
        <RadioButton 
            android:layout_width="0dip"
            android:layout_weight="1" 
            android:text="@string/option1" 
            android:layout_height="wrap_content" 
            android:id="@+id/option1"
            android:layout_gravity="center|left" 
            android:onClick="@string/on_click"/>
        <RadioButton 
            android:layout_width="0dip"
            android:layout_weight="1" 
            android:text="@string/option2" 
            android:onClick="@string/on_click"
            android:layout_height="wrap_content"
            android:layout_gravity="center" 
            android:id="@+id/option2"/>
        <RadioButton 
            android:layout_width="0dip"
            android:layout_weight="1" 
            android:text="@string/option3"
            android:onClick="@string/on_click" 
            android:layout_height="wrap_content"
            android:layout_gravity="center|right" 
            android:id="@+id/option3" />
    </RadioGroup>

在Java代码中,我以编程方式检查有关活动创建的第一个(onCreate()),如下所示:

    mOption = (RadioGroup) findViewById(R.id.option);
    mOption.check(R.id.option1);

但是当显示活动时,不会选中单选按钮。有什么帮助吗?

11 个答案:

答案 0 :(得分:60)

在您的布局中,您可以将android:checked="true"添加到您想要被选中的CheckBox

或者以编程方式,您可以使用可检查界面中定义的setChecked方法:

RadioButton b = (RadioButton) findViewById(R.id.option1); b.setChecked(true);

答案 1 :(得分:30)

试试这个     如果你想根据某个变量的值检查你的单选按钮,例如“genderStr”然后您可以使用以下代码段

    if(genderStr.equals("Male"))
       genderRG.check(R.id.maleRB);
    else 
       genderRG.check(R.id.femaleRB);

答案 2 :(得分:25)

您可能需要在代码的onCreate方法中声明单选按钮并使用它们。

RadioButton rb1 = (RadioButton) findViewById(R.id.option1);
rb1.setChecked(true);

答案 3 :(得分:18)

小心!使用setChecked()检查单选按钮不会改变RadioGroup内的状态。例如,radioGroup中的此方法将返回错误的结果:getCheckedRadioButtonId()

始终使用

检查radioGroup
mOption.check(R.id.option1);

你已被警告过;)

答案 4 :(得分:13)

抓住广播组并查看孩子,看看是否有任何未经检查。

RadioGroup rg = (RadioGroup) view;
int checked = savedInstanceState.getInt(wrap.getAttributeName());

if(checked != -1) {
    RadioButton btn = (RadioButton) rg.getChildAt(checked);
    btn.toggle();
}

答案 5 :(得分:11)

您也可以使用getChildAt()方法。像这样:

mOption = (RadioGroup) findViewById(R.id.option);
((RadioButton)mOption.getChildAt(0)).setChecked(true);

答案 6 :(得分:8)

如果您将mOption.check(R.id.option1);放入onAttachedToWindow方法或类似这样的方法,它会有效:

view.post(new Runnable()
{
    public void run() 
    {
        // TODO Auto-generated method stub
        mOption.check(R.id.option1); 
    }
});

原因可能是检查方法仅在实际渲染无线电组时才有效。

答案 7 :(得分:7)

我在使用无线电组索引时使用此代码:

radioGroup.check(radioGroup.getChildAt(index).getId());

答案 8 :(得分:4)

我在为广播组使用getId()时使用了这段代码:

radiogroup.check(radiogroup.getChildAt(0).getId());

根据RadioGroup的设计设置位置

希望这对您有帮助!

答案 9 :(得分:0)

我更喜欢使用

RadioButton b = (RadioButton) findViewById(R.id.option1);
b.performClick();

而不是使用公认的答案。

RadioButton b = (RadioButton) findViewById(R.id.option1);
b.setChecked(true);

原因是setChecked(true)仅更改单选按钮的选中状态。它不会触发添加到您的单选按钮的onClick()方法。有时,这可能会浪费您的时间来调试与onClick()相关的操作为何不起作用。

答案 10 :(得分:0)

在科特林中。选择第一个元素。您需要在 onViewCreated 或更高版本中执行此操作。

radioGroup.apply { check(getChildAt(0).id) }