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.

John Boker
la source

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();
BP.
la source
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()));
source.rar
la source
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
    }
}
Stefan Bossbaly
la source
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);
            }
        });
Nooh
la source
Ç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());
Marco Fantasia
la source
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);
Jhoe-mar Pagao
la source
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();
Shinz6
la source
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é!

ravine rinek
la source
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();
     }
  });
Vikash Sharma
la source
2
 int index_selected = radio_grp.indexOfChild(radio_grp
                .findViewById(radio_grp.getCheckedRadioButtonId()));
Prashant Maheshwari Andro
la source
2

utilisez simplement ceci:

    int index = 2;
    boolean option3Checked = radioGroup.getCheckedRadioButtonId() == radioGroup.getChildAt(2).getId();
MADWolfHD
la source
1

tu peux faire

findViewById

du groupe radio.

Voici un exemple:

((RadioButton)my_radio_group.findViewById(R.id.radiobtn_veg)).setChecked(true);
Faheem
la source
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);
Andrea Gurioli
la source
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
}
Tarek360
la source
0

Kotlin:

val selectedIndex = radioButtonGroup?.indexOfChild(
  radioButtonGroup?.findViewById(
    radioButtonGroup.getCheckedRadioButtonId())
)
Anand Kumar
la source
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();
        }
    });
Meysam Keshvari
la source