232 votes

Comment obtenir l'index sélectionné d'un RadioGroup dans Android ?

Existe-t-il un moyen simple d'obtenir l'index sélectionné d'un RadioGroup dans Android ou dois-je utiliser OnCheckedChangeListener pour écouter les changements et avoir quelque chose qui conserve le dernier index sélectionné ?

exemple xml :

<RadioGroup android:id="@+id/group1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical">
    <RadioButton android:id="@+id/radio1" android:text="option 1" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <RadioButton android:id="@+id/radio2" android:text="option 2" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <RadioButton android:id="@+id/radio3" android:text="option 3" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <RadioButton android:id="@+id/radio4" android:text="option 4" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <RadioButton android:id="@+id/radio5" android:text="option 5" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</RadioGroup>

si un utilisateur sélectionne option 3 Je veux obtenir l'indice, 2.

512voto

BP. Points 4272

Vous devriez être en mesure de faire quelque chose comme ça :

int radioButtonID = radioButtonGroup.getCheckedRadioButtonId();
View radioButton = radioButtonGroup.findViewById(radioButtonID);
int idx = radioButtonGroup.indexOfChild(radioButton);

Si le RadioGroup contient d'autres vues (comme un TextView ), alors la indexOfChild() retournera un index erroné.

Pour obtenir la sélection RadioButton texte sur le RadioGroup :

 RadioButton r = (RadioButton) radioButtonGroup.getChildAt(idx);
 String selectedtext = r.getText().toString();

11 votes

Mais que faire si ces boutons n'ont pas leur android:id attributs définis ?

0 votes

@BP j'ai le même doute sur l'accès aux boutons radio quand aucun des parents ou l'id des boutons radio n'est défini.

2 votes

@neuront Tant que vous faites radioGroup.findViewById(radioButtonID), cela fonctionnera. RadioGroup définit 1, 2, 3, 4, etc. comme ID de la vue, donc si vous les recherchez dans son contexte, cela fonctionnera.

117voto

source.rar Points 2720

Cela devrait fonctionner,

int index = myRadioGroup.indexOfChild(findViewById(myRadioGroup.getCheckedRadioButtonId()));

6 votes

Utilisez getActivity().findViewById() si vous l'utilisez dans le fragment.

56voto

Stefan Bossbaly Points 2579

Vous pourriez avoir une référence au groupe de radios et utiliser getCheckedRadioButtonId () pour obtenir l'identifiant du bouton radio coché. Regardez aquí

RadioGroup radioGroup = (RadioGroup)findViewById(R.id.radio_group);

Ensuite, lorsque vous avez besoin d'obtenir l'option radio sélectionnée.

int checkedRadioButtonId = radioGroup.getCheckedRadioButtonId();
if (checkedRadioButtonId == -1) {
    // No item selected
}
else{
    if (checkedRadioButtonId == R.id.radio_button1) {
        // Do something with the button
    }
}

1 votes

Oui, c'est l'id du bouton radio coché, mais qu'en est-il de l'index du bouton radio dans le groupe de radio ?

0 votes

Je peux obtenir l'id, je veux l'index, ils sont différents.

0 votes

Qu'entendez-vous par "index" ? S'agit-il d'une vue en liste ?

10voto

ingsaurabh Points 10892

Vous pouvez soit utiliser OnCheckedChangeListener, soit utiliser getCheckedRadioButtonId()

9voto

Marco Fantasia Points 363

Vous pouvez utiliser :

RadioButton rb = (RadioButton) findViewById(rg.getCheckedRadioButtonId());

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