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


213

Existe-t-il un moyen facile d'obtenir l'index sélectionné d'un RadioGroup dans Android ou dois-je utiliser OnCheckedChangeListener pour écouter les modifications et avoir quelque chose qui contient 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 3Je veux obtenir l'index, 2.

Réponses:


479

Vous devriez pouvoir faire quelque chose comme ceci:

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

Si le RadioGroupcontient d'autres vues (comme a TextView), la indexOfChild()méthode renvoie un index incorrect.

Pour obtenir le RadioButtontexte sélectionné sur RadioGroup:

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

11
Mais que faire si ces boutons n'ont pas leurs android:idattributs définis?
neuront

@BP J'ai le même doute quant à l'accès aux boutons radio lorsque aucun des parents ou l'ID des boutons radio n'est défini.
Killer

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

Cela ne fonctionne pas si RadioButton par défaut (et intact par l'utilisateur) est réglé.
Ninja Coding

2
@NinjaCoding Si vous avez fait la même erreur que moi, vous devez définir le bouton radio par défaut (initial) en appelant radioGroup.check (selectedRadioButton.id), pas radioButton.setChecked (true).
Lensflare

108

Cela devrait fonctionner,

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

5
Utilisez getActivity (). FindViewById () si vous utilisez dans le fragment.
Sanjeet A

56

Vous pouvez avoir une référence au groupe radio et l'utiliser getCheckedRadioButtonId ()pour obtenir l'ID du bouton radio vérifié. Jetez un oeil ici

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

Ensuite, lorsque vous devez 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
    }
}

oui, c'est l'identifiant du bouton radio coché, mais qu'en est-il de l'index du bouton radio dans le groupe radio?
John Boker

je peux obtenir l'identifiant, je veux l'index, ils sont différents.
John Boker

que voulez-vous dire par index? est-ce dans une vue de liste?
Stefan Bossbaly

si j'ai 5 boutons radio dans le radiogroupe, et que l'utilisateur sélectionne le 3ème je veux en avoir 2, l'indice du bouton radio sélectionné dans le radiogroupe. ce n'est pas une vue de liste.
John Boker

juste pour clarifier si l'utilisateur sélectionne le 3ème bouton, vous voulez obtenir le 2ème? les groupes et boutons radio n'ont pas d'index.
Stefan Bossbaly

27

essaye ça

        RadioGroup  group= (RadioGroup) getView().findViewById(R.id.radioGroup);
        group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                View radioButton = radioGroup.findViewById(i);
                int index = radioGroup.indexOfChild(radioButton);
            }
        });

Ça marche! Mais je ne comprends pas pourquoi nous devons utiliser cette "radioButton" Voir ..
AlexS


9

Vous pouvez utiliser:

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

6

// utiliser pour obtenir l'id de l'élément sélectionné

int selectedID = myRadioGroup.getCheckedRadioButtonId();

// obtenir la vue de l'élément sélectionné

View selectedView = (View)findViewById( selectedID);

6

Cela a parfaitement fonctionné pour moi de cette façon:

    RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radio_group);
    int radioButtonID = radioGroup.getCheckedRadioButtonId();
    RadioButton radioButton = (RadioButton) radioGroup.findViewById(radioButtonID);
    String selectedtext = (String) radioButton.getText();

5

Tout ce dont vous avez besoin est de définir d'abord des valeurs sur votre RadioButton, par exemple:

RadioButton radioButton = (RadioButton)findViewById(R.id.radioButton);      
radioButton.setId(1);        //some int value

puis chaque fois que ce radioButton spatial sera choisi, vous pouvez tirer sa valeur par l'ID que vous lui avez donné

RadioGroup radioGroup = (RadioGroup)findViewById(R.id.radioGroup);                     
int whichIndex = radioGroup.getCheckedRadioButtonId(); //of course the radioButton
                                                       //should be inside the "radioGroup"
                                                       //in the XML

À votre santé!


5
radioSexGroup=(RadioGroup)findViewById(R.id.radioGroup);

  btnDisplay=(Button)findViewById(R.id.button);

  btnDisplay.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
        int selectedId=radioSexGroup.getCheckedRadioButtonId();
        radioSexButton=(RadioButton)findViewById(selectedId);
        Toast.makeText(MainActivity.this,radioSexButton.getText(),Toast.LENGTH_SHORT).show();
     }
  });


2

utilisez simplement ceci:

    int index = 2;
    boolean option3Checked = radioGroup.getCheckedRadioButtonId() == radioGroup.getChildAt(2).getId();

1

tu peux faire

findViewById

du groupe radio.

Voici un exemple:

((RadioButton)my_radio_group.findViewById(R.id.radiobtn_veg)).setChecked(true);

1

Vous pouvez simplement

-déclarer le groupe radio et un bouton radio de la méthode onCreate

private RadioGroup GrupName;
private RadioButton NameButton;

-définir l'id de vue dans la méthode onCreate

GrupName = (RadioGroup) findViewById(R.id.radioGroupid);

-prendre l'id du radiobutton sélectionné en utilisant

int id = GroupName.getCheckedRadioButtonId();

-utiliser l'id pour correspondre à la vue sélectionnée par les boutons

NameButton = (RadioButton) findViewById(id);

-obtenir enfin la valeur du bouton radio

String valueExpected = NameButton.getText().toString();

--- PS: SI VOUS VOULEZ UNE VALEUR INT, ALORS VOUS POUVEZ LE CAST

int valueExpectedIn = Integer.parseInt(valueExpected);

1

Voici une extension Kotlin pour obtenir la position correcte même si votre groupe contient un TextView ou un non-RadioButton.

fun RadioGroup.getCheckedRadioButtonPosition(): Int {
    val radioButtonId = checkedRadioButtonId
    return children.filter { it is RadioButton }
        .mapIndexed { index: Int, view: View ->
            index to view
        }.firstOrNull {
            it.second.id == radioButtonId
        }?.first ?: -1
}

0

Kotlin:

val selectedIndex = radioButtonGroup?.indexOfChild(
  radioButtonGroup?.findViewById(
    radioButtonGroup.getCheckedRadioButtonId())
)

0
radioSexGroup = (RadioGroup) findViewById(R.id.radioSex);
btnDisplay = (Button) findViewById(R.id.btnDisplay);
btnDisplay.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // get selected radio button from radioGroup
            int selectedId = radioSexGroup.getCheckedRadioButtonId();
            // find the radiobutton by returned id
            radioSexButton = (RadioButton) findViewById(selectedId);
Toast.makeText(MainActivity.this,radioSexButton.getText(),Toast.LENGTH_SHORT).show();
        }
    });
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.