Ayant une solide expérience dans le domaine non-Java et non-Android, j'apprends Android.
J'ai beaucoup de confusion avec différents domaines, l'un d'eux est de savoir comment gérer les clics sur les boutons. Il y a au moins 4 façons de faire ça (!!!), elles sont brièvement listées ici
à des fins de cohérence, je les énumérerai:
Avoir un membre de la
View.OnClickListener
classe dans l'activité et l'affecter à une instance qui gérera laonClick
logique dans laonCreate
méthode d'activité.Créez 'onClickListener' dans la méthode d'activité 'onCreate' et affectez-le au bouton à l'aide de setOnClickListener
Implémentez 'onClickListener' dans l'activité elle-même et affectez 'this' comme écouteur pour le bouton. Dans le cas où l'activité a peu de boutons, l'identifiant du bouton doit être analysé pour exécuter le gestionnaire 'onClick' pour le bouton approprié
Avoir une méthode publique sur l'activité qui implémente la logique 'onClick' et l'affecter au bouton dans la déclaration xml d'activité
Question 1:
Sont-ce toutes des méthodes, y a-t-il une autre option? (Je n'ai besoin d'aucun autre, juste curieux)
Pour moi, le moyen le plus intuitif serait le dernier: il nécessite le moins de code à taper et est le plus lisible (du moins pour moi).
Cependant, je ne vois pas cette approche largement utilisée. Quels sont les inconvénients de son utilisation?
Question 2:
Quels sont les avantages / inconvénients de chacune de ces méthodes? Veuillez partager votre expérience ou un bon lien.
Tout commentaire est le bienvenu!
PS J'ai essayé de Google et de trouver quelque chose pour ce sujet, mais les seules choses que j'ai trouvées sont la description "comment" faire cela, pas pourquoi est-ce bon ou mauvais.
onCreate()
qui n'est pas très long. Les affectations d'écouteur de clics et les classes anonymes peuvent être prises en compte dans une méthode d'assistance distincte appelée à partir deonCreate()
.# 1 J'utilise fréquemment le dernier lorsque j'ai des boutons sur la mise en page qui ne sont pas générés (mais statiques évidemment).
Si vous l'utilisez dans la pratique et dans une application métier, faites particulièrement attention ici, car lorsque vous utilisez un obfuscater source comme ProGuard, vous devrez marquer ces méthodes dans votre activité pour ne pas être obscurcies.
Pour archiver une sorte de sécurité au moment de la compilation avec cette approche, jetez un œil à Android Lint ( exemple ).
# 2 Les avantages et les inconvénients de toutes les méthodes sont presque les mêmes et la leçon devrait être:
Si vous devez affecter la même chose
OnClickListener
à plusieurs instances de bouton, enregistrez-la dans la portée de classe (# 1). Si vous avez besoin d'un simple écouteur pour un Button, effectuez une implémentation anonyme:J'ai tendance à ne pas implémenter le
OnClickListener
dans l'activité, cela devient un peu déroutant de temps en temps (surtout lorsque vous implémentez plusieurs autres gestionnaires d'événements et que personne ne sait ce quethis
tout cela fait).la source
Je préfère l'option 4, mais cela a un sens intuitif pour moi car je travaille beaucoup trop dans Grails, Groovy et JavaFX. Les connexions «magiques» entre la vue et le contrôleur sont communes à tous. Il est important de bien nommer la méthode:
Dans la vue, ajoutez la méthode onClick au bouton ou à un autre widget:
Puis dans la classe, gérez la méthode:
Encore une fois, nommez clairement la méthode, quelque chose que vous devriez faire de toute façon, et la maintenance devient une seconde nature.
Un gros avantage est que vous pouvez maintenant écrire des tests unitaires pour la méthode. L'option 1 peut le faire, mais 2 et 3 sont plus difficiles.
la source
Le moyen le plus utilisé est la déclaration anonyme
Vous pouvez également créer un objet View.OnClickListener et le définir sur bouton ultérieurement, mais vous devez toujours remplacer la méthode onClick par exemple
Lorsque votre activité implémente l'interface OnClickListener, vous devez remplacer la méthode onClick (View v) au niveau de l'activité. Ensuite, vous pouvez assumer cette activité en tant qu'auditeur de bouton, car elle implémente déjà l'interface et remplace la méthode onClick ()
(à mon humble avis) 4ème approche utilisée lorsque plusieurs boutons ont le même gestionnaire, et vous pouvez déclarer une méthode dans la classe d'activité et affecter cette méthode à plusieurs boutons dans une mise en page xml, vous pouvez également créer une méthode pour un bouton, mais dans ce cas, je préfère déclarer les gestionnaires dans la classe d'activité.
la source
Les options 1 et 2 impliquent l'utilisation d'une classe interne qui rendra le code un peu encombrant. L'option 2 est en quelque sorte désordonnée car il y aura un auditeur pour chaque bouton. Si vous avez un petit nombre de boutons, ce n'est pas grave. Pour l'option 4, je pense que ce sera plus difficile à déboguer car vous devrez revenir en arrière et quatrième le code xml et java. J'utilise personnellement l'option 3 lorsque je dois gérer plusieurs clics de bouton.
la source
Mon échantillon, testé dans le studio Android 2.1
Définir le bouton dans la mise en page XML
Détection de pulsation Java
la source
Pour rendre les choses plus faciles comme indiqué à la question 2, vous pouvez utiliser la méthode lambda comme celle-ci pour enregistrer la mémoire des variables et éviter de naviguer de haut en bas dans votre classe de vue
mais si vous souhaitez appliquer l'événement de clic à votre bouton à la fois dans une méthode.
vous pouvez utiliser la question 3 de @D. Réponse Tran. Mais n'oubliez pas d'implémenter votre classe de vue avec
View.OnClickListener
.En autre, utiliser correctement la question n ° 3
la source
Question n ° 1 - C'est le seul moyen de gérer les clics sur les vues.
Question # 2 -
Option # 1 / Option # 4 - Il n'y a pas beaucoup de différence entre l'option # 1 et l'option # 4. La seule différence que je vois est que dans un cas, l'activité consiste à implémenter OnClickListener, tandis que dans l'autre cas, il y aurait une implémentation anonyme.
Option # 2 - Dans cette méthode, une classe anonyme sera générée. Cette méthode est un peu lourde, car vous devez la faire plusieurs fois si vous avez plusieurs boutons. Pour les classes anonymes, vous devez faire attention à la gestion des fuites de mémoire.
Option n ° 3 - Cependant, c'est un moyen facile. Habituellement, les programmeurs essaient de n'utiliser aucune méthode avant de l'écrire, et par conséquent, cette méthode n'est pas largement utilisée. Vous verrez que la plupart des gens utilisent l'option 4. Parce que c'est plus propre en terme de code.
la source
Il existe également des options disponibles sous la forme de diverses bibliothèques qui peuvent rendre ce processus très familier aux personnes qui ont utilisé d'autres frameworks MVVM.
https://developer.android.com/topic/libraries/data-binding/
Montre un exemple de bibliothèque officielle, qui vous permet de lier des boutons comme celui-ci:
la source
Étape 1: Créez un fichier XML:
Étape 2: Créez MainActivity:
HappyCoding!
la source