Set selected index of an Android RadioGroup


Translate

Is there a way to set the selected index of a RadioGroup in android, other than looping through the child radiobuttons and selecting checking the radio button at the selected index?

Note: I am populating the Radio Button Group at run time.


All Answers
  • Translate

    If your radio group is defined in a layout xml file, each button can be assigned an id. Then you just check a button like this

    radioGroup.check(R.id.myButtonId);
    

    If you created your radio group programmatically (I'm not even sure how you do this...), you might want to consider creating a special layout xml file just for the radio group so that you can assign R.id.* ids to the buttons.

    Please see the answer below if you are, in fact, looking to set the radio button group by index, see the answer below.

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

  • Translate

    Question said "set selected INDEX", here's how to set it by index:

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

    ........

    Additional info: It seems that Google wants you to use id instead of index, because using id is more bug proof. For example, if you have another UI element in your RadioGroup, or if another developer re-orders the RadioButtons, the indices might change and not be what you expected. But if you're the only developer, this is totally fine.


  • Translate

    Siavash's answer is correct:

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

    But be aware that a radioGroup can contain views other than radioButtons -- like this example that includes a faint line under each choice.

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

    In this case using an index of 1, for example, would generate an error. The item at index 1 is the first separator line -- not a radioButton. The radioButtons in this example are at indexes 0, 2, 4, 6.


  • Translate

    you can do findViewById from the radio group .

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

  • Translate

    This Worked For me, I created radio button dynamically by

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

    Now Check a button using,

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

  • Translate

    Inside onBindViewHolder set the tag to Button Group

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

    and in the 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()
        }