RadioGroup: How to check programmatically

AndroidRadio Group

Android Problem Overview


I create a RadioGroup from XML

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

In Java code, I programmatically check the first one on activity creation (onCreate()) as following:

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

But when the activity is shown, no radio button is checked. Any help?

Android Solutions


Solution 1 - Android

In your layout you can add android:checked="true" to CheckBox you want to be selected.

Or programmatically, you can use the setChecked method defined in the checkable interface:

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

Solution 2 - Android

try this if you want your radio button to be checked based on value of some variable e.g. "genderStr" then you can use following code snippet

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

Solution 3 - Android

Watch out! checking the radiobutton with setChecked() is not changing the state inside the RadioGroup. For example this method from the radioGroup will return a wrong result: getCheckedRadioButtonId().

Check the radioGroup always with

mOption.check(R.id.option1);

you've been warned ;)

Solution 4 - Android

You may need to declare the radio buttons in the onCreate method of your code and use them.

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





Solution 5 - Android

I use this code piece while working with indexes for radio group:

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

Solution 6 - Android

Also you can use getChildAt() method. Like this:

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

Solution 7 - Android

Grab the radio group and look at the children to see if any are unchecked.

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

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

Solution 8 - Android

I use this code piece while working with getId() for radio group:

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

set position as per your design of RadioGroup

hope this will help you!

Solution 9 - Android

it will work if you put your mOption.check(R.id.option1); into onAttachedToWindow method or like this:

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

the reason may be that check method will only work when the radiogroup is actually rendered.

Solution 10 - Android

In Kotlin. Select first element. And you need to do this in onViewCreated or later.

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

Solution 11 - Android

I prefer to use

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

instead of using the accepted answer.

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

The reason is setChecked(true) only changes the checked state of radio button. It does not trigger the onClick() method added to your radio button. Sometimes this might waste your time to debug why the action related to onClick() not working.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBao LeView Question on Stackoverflow
Solution 1 - AndroidBlackbeltView Answer on Stackoverflow
Solution 2 - AndroidShashank DegloorkarView Answer on Stackoverflow
Solution 3 - AndroidAndrewBloomView Answer on Stackoverflow
Solution 4 - AndroidvikView Answer on Stackoverflow
Solution 5 - AndroidSeref BulbulView Answer on Stackoverflow
Solution 6 - AndroidLevorView Answer on Stackoverflow
Solution 7 - AndroidMateusz MazurView Answer on Stackoverflow
Solution 8 - AndroidSaurabh GaddelpalliwarView Answer on Stackoverflow
Solution 9 - AndroiddavidView Answer on Stackoverflow
Solution 10 - AndroidkulikovmanView Answer on Stackoverflow
Solution 11 - AndroidCodingpanView Answer on Stackoverflow