web-dev-qa-db-fra.com

Définir l'index sélectionné d'un Android RadioGroup

Existe-t-il un moyen de définir l’index sélectionné d’un groupe RadioGroup dans Android, autrement que de parcourir en boucle les radiobuttons enfants et de cocher le bouton radio correspondant à l’index sélectionné?

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

78
Hassan Mokdad

Si votre groupe de radio est défini dans un fichier XML de présentation, un ID peut être attribué à chaque bouton. Ensuite, il vous suffit de cocher un bouton comme celui-ci

radioGroup.check(R.id.myButtonId);

Si vous avez créé votre groupe de radio par programme (je ne suis même pas sûr de savoir comment faire cela ...), vous pouvez envisager de créer un fichier xml de présentation spécial destiné uniquement au groupe de radio afin que vous puissiez affecter un identifiant R.id. * aux boutons.

Veuillez consulter la réponse ci-dessous si, en fait, vous souhaitez définir le groupe de boutons radio par index, reportez-vous à la réponse ci-dessous.

162
jjm

La question dit "set selected INDEX", voici comment la 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 son utilisation est plus efficace. Par exemple, si vous avez un autre élément d'interface utilisateur dans votre groupe Radio, ou si un autre développeur réordonne les boutons radio, les index peuvent changer et ne pas correspondre à vos attentes. Mais si vous êtes le seul développeur, c'est totalement correct. 

81
Siavash

La réponse de Siavash est correcte:

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

Sachez cependant qu'un groupe radio peut contenir des vues autres que des boutons radio, comme dans cet exemple, qui inclut une faible ligne 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 bouton radio. Les boutons radio dans cet exemple sont aux index 0, 2, 4, 6.

4
Alan

vous pouvez faire findViewById à partir du groupe radio.

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

Cela a fonctionné Pour moi, j'ai créé le bouton radio dynamiquement par 

  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
    }
}

Maintenant, vérifiez un bouton en utilisant,

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

radioGroup.check( radio_button_Id );
1
M A S S

À l'intérieur de onBindViewHolder, définissez la balise sur le groupe de boutons.

@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()
    }
0
Jiten Basnet