RadioGroup:如何以编程方式检查

Bao*_* Le 47 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>
Run Code Online (Sandbox Code Playgroud)

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

    mOption = (RadioGroup) findViewById(R.id.option);
    mOption.check(R.id.option1);
Run Code Online (Sandbox Code Playgroud)

但是当显示活动时,不会检查单选按钮.有帮助吗?

Bla*_*elt 64

在您的布局中,您可以添加android:checked="true"CheckBox想要选择的位置.

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

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

  • 是的,它适用于具有XML分配的checked属性的RadioButton,但它不适用于Java代码(即mOption.check(R.id.option1)); (7认同)
  • 由于我在同一布局中有两个RadioGroup,因此代码不起作用.如果我删除一个,另一个效果很好.我仍然存在同一布局中两个或更多RadioGroup的问题.谢谢 (2认同)

Sha*_*kar 33

试试这个如果你想根据一些变量的值来检查单选按钮,例如"genderStr",那么你可以使用下面的代码片段

    if(genderStr.equals("Male"))
       genderRG.check(R.id.maleRB);
    else 
       genderRG.check(R.id.femaleRB);
Run Code Online (Sandbox Code Playgroud)


vik*_*vik 25

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

RadioButton rb1 = (RadioButton) findViewById(R.id.option1);
rb1.setChecked(true);
Run Code Online (Sandbox Code Playgroud)


And*_*oom 20

小心!检查radiobutton并setChecked()没有改变RadioGroup内的状态.例如,radioGroup中的这个方法将返回错误的结果:getCheckedRadioButtonId().

始终检查radioGroup

mOption.check(R.id.option1);
Run Code Online (Sandbox Code Playgroud)

你被警告了;)

  • 这个答案应该接受答案! (2认同)

小智 13

抓住无线电组并查看孩子,看看是否有任何未经检查.

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

if(checked != -1) {
    RadioButton btn = (RadioButton) rg.getChildAt(checked);
    btn.toggle();
}
Run Code Online (Sandbox Code Playgroud)


Tar*_*vyi 12

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

mOption = (RadioGroup) findViewById(R.id.option);
((RadioButton)mOption.getChildAt(0)).setChecked(true);
Run Code Online (Sandbox Code Playgroud)

  • 像往常一样,投票率较低的答案是最好的答案 (2认同)

Ser*_*bul 10

我在处理无线电组的索引时使用了这段代码:

radioGroup.check(radioGroup.getChildAt(index).getId());
Run Code Online (Sandbox Code Playgroud)

  • 这应该在顶部。其他的则不必要地复杂。 (3认同)
  • 最佳答案。一条线。容易理解。需要单个对象。可以很容易地添加到方法中。 (2认同)

小智 8

如果你把你会工作 mOption.check(R.id.option1);onAttachedToWindow 法是这样的:

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

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


Sau*_*war 6

在为广播组使用getId()时,我使用以下代码段:

radiogroup.check(radiogroup.getChildAt(0).getId());
Run Code Online (Sandbox Code Playgroud)

根据RadioGroup的设计设置位置

希望能帮到你!


小智 5

在科特林中。选择第一个元素。并且您需要在onViewCreated或稍后执行此操作。

radioGroup.apply { check(getChildAt(0).id) }
Run Code Online (Sandbox Code Playgroud)