Définir l'index sélectionné d'un groupe radio Android

95

Existe-t-il un moyen de définir l'index sélectionné d'un RadioGroup dans Android, autre que de parcourir les boutons radio enfants et de sélectionner le bouton radio à l'index sélectionné?

Remarque: je remplis le groupe de boutons radio au moment de l'exécution.

Hassan Mokdad
la source

Réponses:

202

Si votre groupe radio est défini dans un fichier xml de mise en page, chaque bouton peut se voir attribuer un identifiant. Ensuite, vous cochez simplement un bouton comme celui-ci

radioGroup.check(R.id.myButtonId);

Si vous avez créé votre groupe de radio par programmation (je ne sais même pas comment vous faites cela ...), vous voudrez peut-être envisager de créer un fichier xml de mise en page spécial juste pour le groupe de radio afin que vous puissiez attribuer R.id. * ids aux boutons.

S'il vous plaît voir la réponse ci-dessous si vous cherchez, en fait, à définir le groupe de boutons radio par index, voir la réponse ci-dessous.

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);
jjm
la source
2
Salut, je les ai créés par programme en utilisant ce code: for (int i = 0; i <lookupTypes.size (); i ++) {// RadioButton rbt = new RadioButton (this); //, null, // R.style. RadioGroupItem); RadioButton rbt = (RadioButton) getLayoutInflater (). Inflate (R.layout.tmpltradiobutton, null); rbt.setId (i); rbt.setText (lookupTypes.get (i) .getValue ()); rbt.setTag (lookupTypes.get (i)); rbtnGroup.addView (rbt); }
Hassan Mokdad
Puisque vous définissez leurs identifiants sur l'index dans lookupTypes, vous pouvez simplement utiliser cet index comme argument de la checkméthode.
jjm
cette réponse explique littéralement à nouveau ce que le demandeur de la question a déjà déclaré - l'autre réponse devrait être la réponse acceptée car elle indique correctement comment sélectionner par l'index.
Lassi Kinnunen
@LassiKinnunen J'ai l'impression que le nombre de votes positifs sur cette réponse suggère que les gens en tirent ce dont ils ont besoin ... cela dit, vous avez raison de dire que l'autre réponse est plus correcte pour la question posée: - /
jjm
2
Honnêtement, je me sens un peu gêné que ce soit ma réponse SO la plus votée.
jjm
86

La question disait "définir INDEX sélectionné", voici comment le définir par index:

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);

........

Informations supplémentaires: Il semble que Google veuille que vous utilisiez id au lieu d'index, car l'utilisation de id est plus à l'épreuve des bogues. Par exemple, si vous avez un autre élément d'interface utilisateur dans votre RadioGroup, ou si un autre développeur réorganise les RadioButtons, les indices peuvent changer et ne pas correspondre à ce que vous attendiez. Mais si vous êtes le seul développeur, c'est très bien.

Siavash
la source
Pouvez-vous expliquer ce code, en quoi c'est la bonne réponse?
rfornal
1
@rfornal ce code vous permet de saisir le bouton radio par INDEX, par opposition à par View id (tel que R.id.radioButton1), et réduit le besoin d'implémenter une table de recherche pour convertir l'index en view id.
Siavash
5

La réponse de Siavash est correcte:

((RadioButton)radioGroup.getChildAt(index)).setChecked(true);

Mais sachez qu'un radioGroup peut contenir des vues autres que radioButtons - comme cet exemple qui inclut une ligne pâle sous chaque choix.

<RadioGroup
    android:id="@+id/radioKb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <RadioButton
        android:id="@+id/kb1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Onscreen - ABC" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Onscreen - Qwerty" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Standard softkey" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

    <RadioButton
        android:id="@+id/kb4"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:text="Physical keyboard" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#33000000" />

</RadioGroup>

Dans ce cas, l'utilisation d'un index de 1, par exemple, générerait une erreur. L'élément à l'index 1 est la première ligne de séparation - pas un radioButton. Les radioButtons dans cet exemple sont aux index 0, 2, 4, 6.

Alan
la source
3

vous pouvez faire findViewById à partir du groupe radio.

((RadioButton)my_radio_group.findViewById(R.id.radiobtn_veg)).setChecked(true);`
Faheem
la source
1

Cela a fonctionné Pour moi, j'ai créé un bouton radio dynamiquement en

  private void createRadioButton() {

    RadioButton[] rb = new RadioButton[5];

    RadioGroup.LayoutParams layoutParams = new RadioGroup.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT,
            1.0f);

    radioGroup.setOrientation(RadioGroup.HORIZONTAL);

    for (int ID = 0; ID < 5; ID++) {
        rb[ID] = new RadioButton(this);
        rb[ID].setLayoutParams(layoutParams);
        rb[ID].setText("Button_Text");
        radioGroup.addView(rb[ID]); //the RadioButtons are added to the radioGroup instead of the layout
    }
}

Vérifiez maintenant un bouton en utilisant,

int radio_button_Id = radioGroup.getChildAt(index).getId();

radioGroup.check( radio_button_Id );
Mukeshkumar S
la source
0

À l'intérieur de onBindViewHolder, définissez la balise sur Button Group

@Override
public void onBindViewHolder(final CustomViewHolder holder, final int position) {
   ...
   holder.ButtonGroup.setTag(position);
}

et dans le ViewHolder

ButtonGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
        ...
        int id = radioGroup.getCheckedRadioButtonId();

        RadioButton radioButton = (RadioButton) radioGroup.findViewById(id);

        int clickedPos = (Integer) radioGroup.getTag();

        packageModelList.get(clickedPos).getPoll_quest()
    }
Jiten Basnet
la source