Comment définir le bouton radio coché par défaut dans radiogroup?

132

J'ai créé RadioGroupet RadioButtondynamiquement comme suit:

RadioGroup radioGroup = new RadioGroup(context);
                    RadioButton radioBtn1 = new RadioButton(context);
                    RadioButton radioBtn2 = new RadioButton(context);
                    RadioButton radioBtn3 = new RadioButton(context);

                    radioBtn1.setText("Less");
                    radioBtn2.setText("Normal");
                    radioBtn3.setText("More");

                    radioBtn2.setChecked(true);

                    radioGroup.addView(radioBtn1);
                    radioGroup.addView(radioBtn2);
                    radioGroup.addView(radioBtn3);

Ici les radioBtn2.setChecked(true);causes d' étape sont radioBtn2toujours vérifiées. Cela signifie que je ne peux pas décocher radioBtn2en cochant les deux autres boutons radio ( radioBtn1, radioBtn3). Je veux que cela RadioGroupne puisse cocher qu'un seul bouton radio à la fois (maintenant, il peut vérifier deux radiobutton à la fois).

Comment puis-je résoudre ce problème?

Sablonneux
la source
est-ce que vous avez besoin dynamiquement ???
vk hooda

Réponses:

217

vous devriez vérifier le radiobutton dans le radiogroup comme ceci:

radiogroup.check(IdOfYourButton)

Bien sûr, vous devez d'abord définir un identifiant pour vos boutons radio

EDIT: j'ai oublié, ça radioButton.getId()marche aussi, merci Ramesh

EDIT2:

android:checkedButton="@+id/my_radiobtn"

fonctionne en xml radiogroup

Sprigg
la source
39
ou si vous ne voulez pas identifier votre RadioButtonet que vous connaissez l'index, vous pouvez utiliser ((RadioButton) radioGroup.getChildAt (INDEX)). setChecked (true);
Ahmad Kayyali le
17
Tu ne devrais pas faire ça. Cela provoquera le problème "setChecked" décrit dans cette question. Bien sûr, il existe des moyens de le faire sans les identifiants de vos boutons, mais veuillez ne pas utiliser setChecked() One way serait radiogroup.check(((RadioButton)radioGroup.getChildAt(INDEX)).getId())ou quelque chose comme ça
Sprigg
1
bon de ne pas oublier d'ajouter le bouton radio au groupe de boutons radio avant d' appeler group.check (button.getId ())
tom
1
Je devais le faire de cette façon: radioGroup.Check(radioGroup.GetChildAt(0).Id);pour les utilisateurs de Xamarin.Android
Mario Galván
112

Dans le cas de l'attribut xml, il android:checkedButtonprend la valeur idde RadioButtonà vérifier.

<RadioGroup
...
...
android:checkedButton="@+id/IdOfTheRadioButtonInsideThatTobeChecked"
... >....</RadioGroup>
IronBlossom
la source
50

Dans le fichier XML, définissez le android:checkedButtonchamp dans votre RadioGroup, avec l'ID de votre valeur par défaut RadioButton:

<RadioGroup
    ....
    android:checkedButton="@+id/button_1">

    <RadioButton
        android:id="@+id/button_1"
        ...../>

    <RadioButton
        android:id="@+id/button_2"
        ...../>

    <RadioButton
        android:id="@+id/button_3"
        ...../>
</RadioGroup>
Sara
la source
20
    RadioGroup radioGroup = new RadioGroup(WvActivity.this);
    RadioButton radioBtn1 = new RadioButton(this);
    RadioButton radioBtn2 = new RadioButton(this);
    RadioButton radioBtn3 = new RadioButton(this);

    radioBtn1.setText("Less");
    radioBtn2.setText("Normal");
    radioBtn3.setText("More");


    radioGroup.addView(radioBtn1);
    radioGroup.addView(radioBtn2);
    radioGroup.addView(radioBtn3);

    radioGroup.check(radioBtn2.getId());
Ramesh Solanki
la source
6
RadioGroup radioGroup = new RadioGroup(context);
RadioButton radioBtn1 = new RadioButton(context);
RadioButton radioBtn2 = new RadioButton(context);
RadioButton radioBtn3 = new RadioButton(context);

radioBtn1.setText("Less");
radioBtn2.setText("Normal");
radioBtn3.setText("More");

radioGroup.addView(radioBtn1);
radioGroup.addView(radioBtn2);
radioGroup.addView(radioBtn3);
radioBtn2.setChecked(true);
Oscar d'Anuj
la source
L'important est d'utiliser une setChecked()fois que tous les boutons radio ont été ajoutés au groupe radio. Alors, ce radioGroup.check(radioBtn2.getId())n'est pas nécessaire
Hartmut Pfitzinger
3

Il y avait le même problème dans le code de mon collègue. Cela semble car votre groupe radio n'est pas correctement configuré avec vos boutons radio. C'est la raison pour laquelle vous pouvez sélectionner plusieurs fois les boutons radio. J'ai essayé beaucoup de choses, finalement j'ai fait un truc qui est faux en fait, mais qui fonctionne bien.

for ( int i = 0 ; i < myCount ; i++ )
{
    if ( i != k )
    {
        System.out.println ( "i = " + i );
        radio1[i].setChecked(false);
    }
}

Ici, j'en ai défini une pour la boucle, qui vérifie les boutons radio disponibles et désélectionne chacun d'entre eux sauf le nouveau cliqué. essayez-le.

Lucifer
la source
1

Ajoutez android:checked = "true"votre activity.xml

Leotrim Vojvoda
la source
0

C'est un bug de RadioGroup

RadioButton radioBtn2 = new RadioButton(context);

radioBtn2 sans viewId, et generateViewId est dans onChildViewAdded ()

public void onChildViewAdded(View parent, View child) {
    if (parent == RadioGroup.this && child instanceof RadioButton) {
        int id = child.getId();
        // generates an id if it's missing
        if (id == View.NO_ID) {
            id = View.generateViewId();
            child.setId(id);
        }
        ((RadioButton) child).setOnCheckedChangeWidgetListener(
                mChildOnCheckedChangeListener);
    }

    if (mOnHierarchyChangeListener != null) {
        mOnHierarchyChangeListener.onChildViewAdded(parent, child);
    }
}

donc, d'abord radioGroup.addView (radioBtn2), puis radioBtn2.setChecked (true);

Comme ça:

RadioGroup radioGroup = new RadioGroup(context);
RadioButton radioBtn1 = new RadioButton(context);
RadioButton radioBtn2 = new RadioButton(context);
RadioButton radioBtn3 = new RadioButton(context);

radioBtn1.setText("Less");
radioBtn2.setText("Normal");
radioBtn3.setText("More");

radioGroup.addView(radioBtn1);
radioGroup.addView(radioBtn2);
radioGroup.addView(radioBtn3);

radioBtn2.setChecked(true);
qinmiao
la source