I have a RadioGroup
and I want to align buttons next to each other in two columns and five rows and I am unable to achieve it. Things I have tried:
RelativeLayout
-> Outside RadioGroup
-> Inside RadioGroup
.
All RadioButtons
are selected, but I want only one to be selected.RadioGroup
: orientationTableRow
TableLayout
Please let me know how create one RadioGroup
and have two columns and many RadioButtons
within.
You can simulate that RadioGroup
to make it look like you have only one. For example you have rg1
and rg2
(RadioGroups
with orientation set to vertical
(the two columns)). To setup those RadioGroups
:
rg1 = (RadioGroup) findViewById(R.id.radioGroup1);
rg2 = (RadioGroup) findViewById(R.id.radioGroup2);
rg1.clearCheck(); // this is so we can start fresh, with no selection on both RadioGroups
rg2.clearCheck();
rg1.setOnCheckedChangeListener(listener1);
rg2.setOnCheckedChangeListener(listener2);
To select only one RadioButton
in those RadioGroups
the listeners above will be:
private OnCheckedChangeListener listener1 = new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId != -1) {
rg2.setOnCheckedChangeListener(null); // remove the listener before clearing so we don't throw that stackoverflow exception(like Vladimir Volodin pointed out)
rg2.clearCheck(); // clear the second RadioGroup!
rg2.setOnCheckedChangeListener(listener2); //reset the listener
Log.e("XXX2", "do the work");
}
}
};
private OnCheckedChangeListener listener2 = new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId != -1) {
rg1.setOnCheckedChangeListener(null);
rg1.clearCheck();
rg1.setOnCheckedChangeListener(listener1);
Log.e("XXX2", "do the work");
}
}
};
To get the checked RadioButton
from the RadioGroups
you could do:
int chkId1 = rg1.getCheckedRadioButtonId();
int chkId2 = rg2.getCheckedRadioButtonId();
int realCheck = chkId1 == -1 ? chkId2 : chkId1;
If you use the check()
method of the RadioGroup
you have to remember to call clearCheck()
on the other Radiogroup
.