Reputation: 470
If I set a radio button to be selected on the first time, it works fine. But if I unselect it by calling .setChecked(false); then, later even if I try to make it selected by calling setChecked(true) will not unselect the previous one.
private void radiotype() {
count = //changed every time.
LinearLayout llques = (LinearLayout) mview.findViewById(R.id.llrbgRBD);
RadioGroup group = new RadioGroup(context);
group.setOrientation(RadioGroup.VERTICAL);
final RadioButton[] rb = new RadioButton[count];
List<String[]> ans = getAnswerList.getAns();
for (int j = 0; j < count; j++) {
rb[j] = new RadioButton(context);
rb[j].setVisibility(View.VISIBLE);
rb[j].setText("`enter code here`hi");
String a = rb[j].getText().toString();`enter code here`
Log.e("getAnswerList===a", "getAnswerList===>a" + a);
Log.e("getAnswerList", "getAnswerList===>" + ans.get(index)[0]);
if (a.equalsIgnoreCase(ans.get(index)[0])) {
rb[j].setChecked(true);
}
rb[j].setTextColor(Color.BLACK);
rb[j].setButtonDrawable(R.drawable.custom_radio_button);
group.addView(rb[j]);
}
llques.removeAllViews();
llques.addView(group);
group.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkedId) {
// checkedId is the RadioButton selected
//int c = count;
for(int i=0;i<count;i++){
rb[i].setChecked(false);
}
//
Log.v("id",""+checkedId);
for (int i = 0; i < count; i++) {
if (rb[i].getId() == checkedId){
rb[i].setChecked(true);
}
}
}
});
Upvotes: 7
Views: 3416
Reputation: 409
The way RadioGroup ensure only one RadioButton is checked is based on those RadioButton's Id.
Try add this in your first for-loop:
int uniqueId = j; // or whatever unique in this RadioGroup
rb[j].setId(uniqueId);
Upvotes: 1
Reputation: 4001
Do this -
if (a.equalsIgnoreCase(ans.get(index)[0])) {
rb[j].setChecked(true);
}
after
group.addView(rb[j]);
instead of checking it before addView.
Make it like -
private void radiotype() {
count = //changed every time.
LinearLayout llques = (LinearLayout) mview.findViewById(R.id.llrbgRBD);
RadioGroup group = new RadioGroup(context);
group.setOrientation(RadioGroup.VERTICAL);
final RadioButton[] rb = new RadioButton[count];
List<String[]> ans = getAnswerList.getAns();
for (int j = 0; j < count; j++) {
rb[j] = new RadioButton(context);
rb[j].setVisibility(View.VISIBLE);
rb[j].setText("`enter code here`hi");
String a = rb[j].getText().toString();`enter code here`
Log.e("getAnswerList===a", "getAnswerList===>a" + a);
Log.e("getAnswerList", "getAnswerList===>" + ans.get(index)[0]);
rb[j].setTextColor(Color.BLACK);
rb[j].setButtonDrawable(R.drawable.custom_radio_button);
group.addView(rb[j]);
if (a.equalsIgnoreCase(ans.get(index)[0])) {
rb[j].setChecked(true);
}
}
llques.removeAllViews();
llques.addView(group);
group.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkedId) {
// checkedId is the RadioButton selected
//int c = count;
for(int i=0;i<count;i++){
rb[i].setChecked(false);
}
//
Log.v("id",""+checkedId);
for (int i = 0; i < count; i++) {
if (rb[i].getId() == checkedId){
rb[i].setChecked(true);
}
}
}
});
This worked for me too.
Upvotes: 0
Reputation: 1554
I know this is rather old, but I just had the same problem. The solution is to change the state of RadioButton
after adding it to RadioGroup
by addView(). I guess this is also what BAKUS tried to say by his sample code.
Upvotes: 5
Reputation: 1
public void getqlist(int comp)
{
LinearLayout ll = (LinearLayout) findViewById(R.id.variable);
ll.removeAllViews();
xfiche=(ficheflag)?(fiche+1):fichetempo;
String titre="Formulaire "+xfiche+"- Question "+(comp+1)+"/"+taille;
TextView titreView =(TextView) findViewById(R.id.titre);
titreView.setText(titre);
int ii= Integer.parseInt(quest[comp][3].toString());
RadioButton[] rb = new RadioButton[ii];
RadioGroup rg = new RadioGroup(this);
rg.setOrientation(RadioGroup.VERTICAL);
int isel=Integer.parseInt(resp[comp][2].toString())-1;
int bid=254211; // You give any integer ID
for(int i=0; i<ii; i++){
rb[i] = new RadioButton(this);
rb[i].setText(quest[comp][i+5].toString());
if (i==isel)
rb[i].setId(bid); // You capure the previously selected radio button
rg.addView(rb[i]);
}
ll.addView(rg);//you add the whole RadioGroup to the layout
RadioButton tb=(RadioButton) findViewById(bid); // find the button by the Id
tb.toggle(); // toggle it after diplaying the group
}
Upvotes: 0
Reputation: 24853
Use this in your xml.
<RadioGroup
android:id="@+id/status_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_margin="5dp"
>
<RadioButton
android:id="@+id/open_radio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Open"
/>
<RadioButton
android:id="@+id/close_radio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Closed"
/>
<RadioButton
android:id="@+id/all_radio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Both"
/>
</RadioGroup>
And then in java:
final RadioGroup status_group = (RadioGroup) findViewById(R.id.status_group);
//-- By default if you want open button to be checked, you can do that by using
status_group.check(R.id.open_radio);
status_group.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
RadioButton radioButton = (RadioButton) findViewById(checkedId);
status_group.check(checkedId);
radio_status = radioButton.getText().toString().trim();
Log.v("radio_text--", radio_status);
}
});
Upvotes: 0