Listener sur un RadioGroup

 

Ce listener va se mettre à l'écoute des radios boutons posés dans un radio group et va déclencher une méthode lorsque l'un d'eux est pressé.

Comment faire:

Sur l'objet radio group que vous voulez écouter, vous allez utiliser la méthode setOnCheckedChangeListener() en lui indiquant une instance de classe dans laquelle se trouvera une méthode qui doit être déclecnchée en cas de pression sur ce bouton.

Cette méthode doit s'appelée public void onCheckedChanged(RadioGroup group, int checkedId) et recevra une instance de RadioGroup et une instance de RadioButton qui a été positionnée par l'utilisateur.

Il faudra implémenter cette méthode, donc : implements RadioGroup.OnCheckedChangeListener() (On précise RadioGroup car il n'y a pas que le RadioGroup qui utilise OnCheckedChangeListener).

Exemple de cas de définition

Dans la classe principale de votre activité.

En reprenant un projet type helloWorld, voici le activity_main.xml, dans lequel j'ajoute simplement le RadioGroup et ses RadioButton

 

code:

Si vous n'avez pas encore vu la classe Toast, il s'agit simplement d'afficher pendant quelques secondes un message.

A partir de l'identifiant de l'instance de radio bouton reçu, rechercher l'instance de l'objet qui à provoquer le onCheckedChanged(). Il ne reste alors plus qu'à le comparer avec ceux connus pour ce radio group pour exécuter le traitement correspondant. Ici, le code se contentera d'afficher le text du radio button, mais il devrait en fait déclencher des traitements bien plus intelligents que celui codé ici - oui, les if ne servent pas à grand chose !

 

Il est courant d'utiliser une classe anonyme pour définir un listener. L'écriture du code sera alors la suivante:

 

Si vous préférez passez par les instances des objets, plutôt que les identifiants, c'est possible, mais moins beau:

Image non trouvée !Pour rappel, une classe anonyme peut accéder aux methodes et aux attributs de la classe l'englobant. Cela nous arrange bien ici pour accéder aux instances déclarées dans r1 à r3 !

Par contre, Il faudra préciser dans Toast: HelloActivity.this et non plus simplement this (mais c'est une autre histoire).