web-dev-qa-db-fra.com

Comment définir OnClickListener sur un bouton radio dans Android?

J'ai deux RadioButtons dans un RadioGroup. Je veux définir OnClickListener sur ces RadioButtons. En fonction du RadioButton sur lequel vous avez cliqué, je souhaite modifier le texte d'un EditText. Comment puis-je atteindre cet objectif?

97
mayur rahatekar

Je pense qu'un meilleur moyen consiste à utiliser RadioGroup et à définir le programme d'écoute en conséquence pour modifier et mettre à jour le paramètre View en conséquence (vous évite ainsi d'avoir 2, 3, 4 écouteurs, etc.).

    RadioGroup radioGroup = (RadioGroup) findViewById(R.id.yourRadioGroup);        
    radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() 
    {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            // checkedId is the RadioButton selected
        }
    });
215
Ricky

J'espère que cela vous aidera...

RadioButton rb = (RadioButton) findViewById(R.id.yourFirstRadioButton);
rb.setOnClickListener(first_radio_listener);

et

OnClickListener first_radio_listener = new OnClickListener (){
 public void onClick(View v) {
   //Your Implementaions...
 }
};
41
Last Warrior
 radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
    {
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            // checkedId is the RadioButton selected
            RadioButton rb=(RadioButton)findViewById(checkedId);
            textViewChoice.setText("You Selected " + rb.getText());
            //Toast.makeText(getApplicationContext(), rb.getText(), Toast.LENGTH_SHORT).show();
        }
    });
25
Ali

La question portait sur Détecter le bouton radio sur lequel l'utilisateur a cliqué, voici comment obtenir le bouton sur lequel vous avez cliqué

final RadioGroup radio = (RadioGroup) dialog.findViewById(R.id.radioGroup1);
        radio.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {

                View radioButton = radio.findViewById(checkedId);
                int index = radio.indexOfChild(radioButton);

                // Add logic here

                switch (index) {
                case 0: // first button

                    Toast.makeText(getApplicationContext(), "Selected button number " + index, 500).show();
                    break;
                case 1: // secondbutton

                    Toast.makeText(getApplicationContext(), "Selected button number " + index, 500).show();
                    break;
                }
            }
        });
17
Hitesh Sahu

Vous pouvez également ajouter un auditeur à partir de la présentation XML: Android:onClick="onRadioButtonClicked" dans votre balise <RadioButton/>.

<RadioButton Android:id="@+id/radio_pirates"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="@string/pirates"
    Android:onClick="onRadioButtonClicked"/>

Voir Boutons SDK du développeur Android pour plus de détails.

8
Bartosz Bilicki

Juste au cas où quelqu'un aurait du mal avec la réponse acceptée:

Il existe différentes interfaces OnCheckedChangeListener. J'ai ajouté au premier pour voir si une CheckBox avait été modifiée.

import Android.widget.CompoundButton.OnCheckedChangeListener;

contre

import Android.widget.RadioGroup.OnCheckedChangeListener;

En ajoutant l'extrait de code de Ricky, j'avais des erreurs:

La méthode setOnCheckedChangeListener (RadioGroup.OnCheckedChangeListener) dans le type RadioGroup n'est pas applicable pour les arguments (new CompoundButton.OnCheckedChangeListener () {})

Peut être corrigé avec la réponse de ALi:

new RadioGroup.OnCheckedChangeListener()
6
Andy P

Puisque cette question n'est pas spécifique à Java, j'aimerais ajouter comment vous pouvez le faire dans Kotlin:

radio_group_id.setOnCheckedChangeListener({ radioGroup, optionId -> {
        when (optionId) {
            R.id.radio_button_1 -> {
                // do something when radio button 1 is selected
            }
            // add more cases here to handle other buttons in the RadioGroup
        }
    }
})

Ici, radio_group_id est le Android:id attribué au groupe-radio concerné. Pour l'utiliser de cette manière, vous devez importer kotlinx.Android.synthetic.main.your_layout_name.* dans le fichier Kotlin de votre activité. Notez également que si le paramètre radioGroup lambda est inutilisé, il peut être remplacé par _ (trait de soulignement) depuis Kotlin 1.1.

4
Faheel Ahmad