Android onClick dans XML vs OnClickListener

Je me rends compte qu’une question similaire a été posée auparavant, mais c’est différent. Je suis assez nouveau dans le développement d’applications Android et j’ai trois questions concernant les différences entre les atsortingbuts android:onclick="" et la méthode setOnClickListener .

  1. Quelles sont les différences entre les deux? La différence entre les deux implémentations est-elle trouvée au moment de la compilation ou de l’exécution ou les deux?

  2. Quels sont les cas d’utilisation favorables à quelle mise en œuvre?

  3. Quelle (s) différence (s) l’utilisation de fragments dans Android fait-elle dans le choix de l’implémentation?

Différence entre OnClickListener et OnClick:

  • OnClickListener est l’interface que vous devez implémenter et peut être définie sur une vue dans le code Java.
  • OnClickListener est ce qui attend que quelqu’un clique, onclick détermine ce qui se passe lorsque quelqu’un clique.
  • Dernièrement, android a ajouté un atsortingbut xml aux vues appelées android: onclick, qui peuvent être utilisées pour gérer les clics directement dans l’activité de la vue sans avoir à implémenter aucune interface.
  • Vous pouvez facilement échanger une implémentation d’écouteur avec une autre si vous en avez besoin.
  • Un OnClickListener vous permet de séparer l’action / le comportement de l’événement click de la vue qui déclenche l’événement. Bien que pour des cas simples, ce ne soit pas un gros problème, cela pourrait se traduire par une meilleure lisibilité et une plus grande maintenabilité du code pour la gestion complexe des événements
  • OnClickListener étant une interface, la classe qui l’implémente dispose de la flexibilité nécessaire pour déterminer les variables d’instance et les méthodes dont elle a besoin pour gérer l’événement. Encore une fois, ce n’est pas grave dans les cas simples, mais pour les cas complexes, nous ne voulons pas nécessairement mélanger les variables / méthodes liées à la gestion des événements avec le code de la vue qui déclenche l’événement.
  • Le onClick avec la liaison de fonction dans XML Layout est une liaison entre onClick et la fonction qu’il appellera. La fonction doit avoir un argument (la vue) pour que onClick fonctionne.

Les deux fonctionnent de la même manière, il suffit que l’un soit défini via le code Java et l’autre via le code XML.

Implémentation du code setOnClickListener:

 Button btn = (Button) findViewById(R.id.mybutton); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { myFancyMethod(v); } }); // some more code public void myFancyMethod(View v) { // does something very interesting } 

Implémentation XML:

     

Performance:

Les deux sont les mêmes dans la performance. Xml est pré-analysé en code binary lors de la compilation. donc il n’y a pas de tête en Xml.

Limitation:

android: onClick est pour l’API niveau 4 et si vous ciblez <1.6, vous ne pouvez pas l'utiliser.

Simplement:

Si vous avez android:onClick = "someMethod" dans XML , il recherche le public void someMethod dans votre classe d’activité. OnClickListener est appelé directement depuis votre activité et il est lié à une View particulière. Par exemple, someButton.setOnClickListener et dans le code ci-dessous, on dit ce qui doit être fait quand on appuie sur someButton .

J’espère que cela aide 🙂

Je suis choqué que personne n’ait parlé de cela mais soyez prudent, même si android:onClick XML semble être un moyen pratique de gérer le clic, l’implémentation de setOnClickListener fait quelque chose de plus que d’append le onClickListener . En effet, la propriété view peut être clickable à true.

Bien que cela ne soit pas un problème sur la plupart des implémentations Android, selon le constructeur du téléphone, le bouton est toujours clickable = true par défaut mais les autres constructeurs de certains modèles de téléphones peuvent avoir un clickable = false sur les vues non Button.

Donc mettre le XML ne suffit pas, il faut penser tout le temps pour append android:clickable="true" sur non bouton, et si vous avez un device ou le default est clickable = true et vous oubliez même une fois de mettre ce XML atsortingbut, vous ne remarquerez pas le problème à l’exécution mais obtiendrez les commentaires sur le marché quand il sera entre les mains de vos clients!

En outre, nous ne pouvons jamais être sûrs de la façon dont proguard va masquer et renommer les atsortingbuts XML et la méthode de classe, si bien qu’ils ne seront jamais protégés à 100%.

Donc, si vous ne voulez jamais avoir de problèmes et ne jamais y penser, il est préférable d’utiliser setOnClickListener ou des bibliothèques comme ButterKnife avec annotation @OnClick(R.id.button)

Comme dit précédemment: ils sont tous deux un moyen d’append de la logique en réponse à un événement, dans ce cas un événement “clic”.

Je voudrais une séparation entre la logique et la présentation, comme nous le faisons dans le monde HTML / JavaScript: laissez le XML pour la présentation et ajoutez des écouteurs d’événement au moyen du code.

Si vous avez plusieurs boutons utilisant une seule méthode, je suggère de le faire en Java. Mais si vous avez un bouton avec une méthode spécifique, onClick in XML serait mieux.

Il est plus pratique de toujours utiliser l’atsortingbut android: onClick à moins que vous n’ayez une bonne raison, par exemple, si vous instanciez le bouton à l’exécution ou si vous devez déclarer le comportement du clic dans une sous-classe Fragment.

Je pense que la principale différence entre eux est la suivante:

OnClick: Lorsque vous cliquez sur le bouton avec votre doigt.

OnClickListner: C’est peut-être un choix plus large qui peut être implémenté dans différents codes.

Par exemple, lorsque vous tapez url “ymail.com”, yahoo trouve votre nom d’utilisateur et votre mot de passe depuis votre navigateur et active le bouton d’état du clic pour ouvrir votre courrier. Cette action doit être implémentée uniquement dans onClickListener.

C’est mon idée!