Comment définir OnClickListener sur un RadioButton sous Android?


109

J'ai deux RadioButtons à l'intérieur d'un RadioGroup. Je veux m'arrêter OnClickListenersur ces RadioButtonart. En fonction de celui sur lequel vous RadioButtonavez cliqué, je souhaite modifier le texte d'un fichier EditText. Comment puis-je atteindre cet objectif?

Réponses:


234

Je pense qu'une meilleure façon est d'utiliser RadioGroupet de configurer l'auditeur pour qu'il change et mette à jour en Viewconséquence (vous évite d'avoir 2 ou 3 ou 4 auditeurs, 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
        }
    });

2
Ne fonctionnait pas pour moi, Eclipse m'a suggéré d'ajouter @Override, et cela a été corrigé. Merci
Jack Franzen

oui, j'utiliserais radiogroup sauf qu'il ne fonctionne pas à moins que ce ne soit un parent direct dans le xml et que je ne peux pas le garder comme parent direct car ce bouton radio stupide ne peut pas être aligné au centre, donc j'ai dû le placer dans une disposition linéaire ...
Jaxx0rr

vous pouvez essayer de centrer le bouton radio en mettant android: gravity = "center" dans le xml sous la balise RadioGroup. @RudolfRein
OuuGiii

Que faisons-nous si le radiobutton est créé dynamiquement et n'a pas d'identifiant?
Arjun Issar

46

J'espère que ceci 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...
 }
};

1
A travaillé comme un charme, n'oubliez pas d'ajouter un point-virgule après votre dernier crochet bouclé sur votre auditeur on click
inVINCEable

C'est vieux mais bien. La réponse acceptée est plus simple mais ne gère pas le cas où un utilisateur sélectionne quelque chose qui est déjà sélectionné. Cela gère cela. Dommage que l'auditeur de radiogroup ne gère pas "setSelected" sans tenir compte de "changé".
JamieB

27
 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();
        }
    });

1
groupest nécessaire dans RadioButton rb=(RadioButton)group.findViewById(checkedId);
Stupidité artificielle

18

La question portait sur la détection sur quel bouton radio est cliqué, voici comment vous pouvez obtenir quel bouton est 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;
                }
            }
        });

10

Vous pouvez également ajouter un écouteur à partir de la mise android:onClick="onRadioButtonClicked"en page XML: dans votre <RadioButton/>balise.

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

Voir SDK développeur Android - Boutons radio pour plus d'informations.


7

Juste au cas où quelqu'un d'autre se débattre avec la réponse acceptée:

Il existe différentes interfaces OnCheckedChangeListener. J'ai ajouté au premier pour voir si un CheckBox a été changé.

import android.widget.CompoundButton.OnCheckedChangeListener;

contre

import android.widget.RadioGroup.OnCheckedChangeListener;

Lors de l'ajout de l'extrait de Ricky, j'ai eu 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 d'Ali:

new RadioGroup.OnCheckedChangeListener()

5

Étant donné que 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
        }
    }
})

Voici radio_group_idl'attribut android:iddu RadioGroup concerné. Pour l'utiliser de cette façon, vous devez importer kotlinx.android.synthetic.main.your_layout_name.*dans le fichier Kotlin de votre activité. Notez également que si le radioGroupparamètre lambda n'est pas utilisé, il peut être remplacé par _(un trait de soulignement) depuis Kotlin 1.1.


1
RadioGroup radioGroup = (RadioGroup) findViewById(R.id.yourRadioGroup);     
    radioGroup.setOnClickListener(v -> {
                        // get selected radio button from radioGroup
                        int selectedId = radioGroup.getCheckedRadioButtonId();
                        // find the radiobutton by returned id
                        radioButton =  findViewById(selectedId);
                        String slectedValue=radioButton.getText()          
        });

Veuillez fournir une explication pour cette réponse au lieu de simplement afficher le code.
ScoobyDrew18

la dernière ligne doit être: 'String slectedValue = radioButton.getText (). toString ()'
Web.11

0

Pour Kotlin, voici ajouté l'expression lambda et optimisé le code.

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

J'espère que ceci vous aidera. Merci!

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.