142 votes

Comment définir un bouton radio coché par défaut dans un radiogroupe ?

J'ai créé RadioGroup y RadioButton dynamiquement 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 étape radioBtn2.setChecked(true); causes radioBtn2 toujours cochée. Cela signifie que je ne peux pas décocher radioBtn2 en cochant les deux autres boutons radio ( radioBtn1 , radioBtn3 ). Je veux faire en sorte que RadioGroup ne peut vérifier qu'un seul bouton radio à la fois (maintenant il peut vérifier deux boutons radio à la fois).

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

0 votes

Vous avez besoin d'une dynamique ?

239voto

Sprigg Points 900

Vous devez vérifier le bouton radio dans le radiogroupe comme ceci :

radiogroup.check(IdOfYourButton)

Bien sûr, vous devez d'abord attribuer un identifiant à vos boutons radios.

J'ai oublié, radioButton.getId() fonctionne aussi bien, thx Ramesh

EDIT2 :

android:checkedButton="@+id/my_radiobtn"

fonctionne dans le radiogroupe xml

39 votes

Ou si vous ne voulez pas id votre RadioButton et que vous connaissez l'index, vous pouvez utiliser ((RadioButton)radioGroup.getChildAt(INDEX)).setChecked(true) ;

19 votes

Tu ne devrais pas faire ça. Cela causerait 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 pas en utilisant la fonction setChecked() Une façon de faire serait radiogroup.check(((RadioButton)radioGroup.getChildAt(INDEX))‌​.getId()) ou quelque chose comme ça

1 votes

Bon de ne pas oublier d'ajouter le bouton radio au groupe de boutons radio avant appelant group.check(button.getId())

117voto

IronBlossom Points 1153

Dans le cas d'un attribut xml, son android:checkedButton qui prend le id de la RadioButton à vérifier.

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

56voto

Sara Points 136

Dans le fichier XML, définissez l'élément android:checkedButton dans votre RadioGroup avec l'identifiant de l'utilisateur 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>

20voto

Ramesh Sudrasana Points 1399
    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());

3voto

Lucifer Points 14471

Il y avait le même problème dans le code de mon collègue. Il semble que votre groupe de radio ne soit pas correctement défini avec vos boutons radio. C'est la raison pour laquelle vous pouvez effectuer une sélection multiple des boutons radio. J'ai essayé plusieurs choses, finalement j'ai fait une astuce qui est fausse 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'ai mis une boucle for, qui vérifie les boutons radio disponibles et les désélectionne tous sauf celui qui vient d'être cliqué. essayez-le.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X