设置Android RadioGroup的选定索引


Answers:


201

如果您的无线电组在布局xml文件中定义,则可以为每个按钮分配一个ID。然后您只需检查一个这样的按钮

radioGroup.check(R.id.myButtonId);

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

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

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

2
嗨,我使用以下代码以编程方式创建了它们:for(int i = 0; i <lookupTypes.size(); i ++){// RadioButton rbt = new RadioButton(this); //,null,// R.style。 RadioGroupItem); RadioButton rbt =(RadioButton)getLayoutInflater()。inflate(R.layout.tmpltradiobutton,null); rbt.setId(i); rbt.setText(lookupTypes.get(i).getValue()); rbt.setTag(lookupTypes.get(i)); rbtnGroup.addView(rbt); }
Hassan Mokdad 2012年

由于您将其ID设置为lookupTypes中的索引,因此可以仅使用该索引作为check方法的参数。
jjm 2012年

从字面上看,该答案仅再次说明了问问者已经说过的内容-另一个答案应该是被接受的答案,因为它正确地告诉了如何按索引进行选择。
Lassi Kinnunen

@LassiKinnunen我觉得这个答案上的赞成票数目表明人们正在从中得到他们所需要的...那是正确的,对于其他问题,另一个答案更正确:-/
jjm

2
老实说,这是我投票得最高的SO答案,我感到有些尴尬。
jjm 2015年

86

问题说“设置选定的INDEX”,这是如何通过索引设置它:

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

........

附加信息:似乎Google希望您使用id而不是索引,因为使用id更能证明错误。例如,如果您的RadioGroup中有另一个UI元素,或者另一个开发人员重新排序了RadioButton,则索引可能会更改,而不是您所期望的。但是,如果您是唯一的开发人员,那完全没问题。


您能解释一下此代码,它是正确的答案吗?
rfornal

1
@rfornal此代码使您可以通过INDEX而不是View ID(例如R.id.radioButton1)来获取单选按钮,并减少了实现查找表以将索引转换为View ID的需要。
Siavash15年

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处的项目是第一行分隔符-不是radioButton。本例中的单选按钮位于索引0、2、4、6。


3

您可以从广播组中执行findViewById。

((RadioButton)my_radio_group.findViewById(R.id.radiobtn_veg)).setChecked(true);`

1

这对我有用,我通过以下方式动态创建了单选按钮:

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

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()
    }
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.