103

有没有办法在 android 中设置 RadioGroup 的选定索引,而不是循环遍历子单选按钮并选择检查选定索引处的单选按钮?

注意:我在运行时填充单选按钮组。

4

7 回答 7

220

如果您的单选组是在布局 xml 文件中定义的,则可以为每个按钮分配一个 id。然后你只需检查一个像这样的按钮

radioGroup.check(R.id.myButtonId);

如果您以编程方式创建了无线电组(我什至不确定您是如何执行此操作的......),您可能需要考虑为无线电组创建一个特殊的布局 xml 文件,以便您可以分配 R.id.* id到按钮。

如果您实际上正在寻找按索引设置单选按钮组,请参阅下面的答案,请参阅下面的答案。

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);
于 2012-03-23T16:08:55.700 回答
91

问题说“设置选定的索引”,这是按索引设置的方法:

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);

...........

附加信息:Google 似乎希望您使用 id 而不是 index,因为使用 id 更能证明错误。例如,如果您的 RadioGroup 中有另一个 UI 元素,或者如果另一个开发人员重新订购 RadioButtons,则索引可能会发生变化,而不是您的预期。但如果你是唯一的开发人员,这完全没问题。

于 2015-02-14T23:12:10.633 回答
6

您可以从广播组中查找视图ById。

((RadioButton)my_radio_group.findViewById(R.id.radiobtn_veg)).setChecked(true);`
于 2015-09-09T05:03:39.347 回答
5

Siavash 的回答是正确的:

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);

但请注意,radioGroup 可以包含除了 radioButtons 以外的视图——例如这个示例,它在每个选项下都包含一条微弱的线。

<RadioGroup
    android:id="@+id/radioKb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <RadioButton
        android:id="@+id/kb1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Onscreen - ABC" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Onscreen - Qwerty" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Standard softkey" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb4"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Physical keyboard" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

</RadioGroup>

例如,在这种情况下,使用索引 1 会产生错误。索引 1 处的项目是第一个分隔线——不是单选按钮。此示例中的单选按钮位于索引 0、2、4、6 处。

于 2016-07-19T02:53:03.220 回答
2

这对我有用,我通过动态创建单选按钮

  private void createRadioButton() {

    RadioButton[] rb = new RadioButton[5];

    RadioGroup.LayoutParams layoutParams = new RadioGroup.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT,
            1.0f);

    radioGroup.setOrientation(RadioGroup.HORIZONTAL);

    for (int ID = 0; ID < 5; ID++) {
        rb[ID] = new RadioButton(this);
        rb[ID].setLayoutParams(layoutParams);
        rb[ID].setText("Button_Text");
        radioGroup.addView(rb[ID]); //the RadioButtons are added to the radioGroup instead of the layout
    }
}

现在检查一个按钮使用,

int radio_button_Id = radioGroup.getChildAt(index).getId();

radioGroup.check( radio_button_Id );
于 2016-11-15T11:19:31.963 回答
1

使用 Kotlin,您可以通过

  (radio_group_id.getChildAt(index) as RadioButton).isChecked = true

或者

radio_group_id.check(R.id.radio_button_id)

于 2020-09-19T13:21:21.803 回答
0

在 onBindViewHolder 内部将标签设置为 Button Group

@Override
public void onBindViewHolder(final CustomViewHolder holder, final int position) {
   ...
   holder.ButtonGroup.setTag(position);
}

并在 ViewHolder

ButtonGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
        ...
        int id = radioGroup.getCheckedRadioButtonId();

        RadioButton radioButton = (RadioButton) radioGroup.findViewById(id);

        int clickedPos = (Integer) radioGroup.getTag();

        packageModelList.get(clickedPos).getPoll_quest()
    }
于 2018-10-09T16:32:53.707 回答