not able to unchecked the already checked radio button in dynamic radio group
Asked Answered
P

5

7

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);
                } 
            }
        }
    });
Preprandial answered 21/8, 2013 at 12:1 Comment(0)
A
5

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.

Amidase answered 12/1, 2015 at 11:9 Comment(0)
D
1

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);
Dupuy answered 3/1, 2019 at 11:23 Comment(0)
M
0

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);
                }
            });
Muldrow answered 21/8, 2013 at 12:12 Comment(1)
how to do in dynamic radio button and radio button groupPreprandial
T
0
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    

}
Tribade answered 4/10, 2013 at 20:43 Comment(2)
You would do well to explain your answer a bit rather than just paste the code.Precinct
As paqogomez said, can you provide some context to this answer? As it is currently written, it's not very helpful.Typeface
L
0

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.

Landonlandor answered 1/6, 2015 at 9:23 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.