2017-10-11 3 views
0

total Android débutant ici ...Chaque classe doit-elle avoir son propre OnClickListener?

J'ai une activité avec un Surclic Listener comme dans cet exemple: Multiple Buttons `OnClickListener()` android

Et maintenant, je suis mise en place d'un auditeur sur le bouton d'action flottant dans une autre activité. Ce dont je ne suis pas sûr, c'est s'il est possible d'utiliser ce même auditeur, ou est-ce que chaque classe doit l'avoir? Je voudrais vraiment avoir un écouteur pour gérer les événements de clic cardview, ainsi que le bouton d'action flottante.

+1

si elle est seulement pour les boutons, vous peut spécifier quelle méthode il est supposé exécuter dans le XML: 'andorid: onClick = methodName' – Century

+1

Si ces classes ont la même fonctionnalité alors oui vous pouvez implémenter le même OnClickListener sinon vous devez implémenter le différent écouteur afin de faire le différent nt tâche – Lokesh

+0

@Century Je ne pense pas que le PO demande cela. Si vous auriez lu la question, il demande d'implémenter un écouteur pour gérer les différents événements de clic – Lokesh

Répondre

2

en général vous pouvez utiliser le même écouteur pour plusieurs boutons. si elles sont dans des activités différentes, vous pouvez écrire une classe séparée qui implémente View.OnClickListener. Comme ceci:

public class MyButtonListener implements View.OnClickListener { 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 

    case R.id.oneButton: 
     // do your code 
     break; 

    case R.id.twoButton: 
     // do your code 
     break; 

    case R.id.threeButton: 
     // do your code 
     break;// default method for handling onClick Events.. 
} 

}

Ensuite, il vous suffit de configurer votre écouteur bouton comme button.setOnClicklistener(new MyOnClickListener());

Si vos boutons font tous la même action, vous n'aurez pas le bloc switch-case.

Créer une classe d'écoute séparée n'est pas du tout une mauvaise idée MAIS: vous devriez essayer d'en implémenter un pour chaque activité afin de garder une vue d'ensemble sur vos actions de bouton.

+0

s'il vous plaît marquer cela comme la réponse si elle a résolu votre problème :) – Pynnie

+0

Cette approche a un sens pour moi. Mais pourriez-vous expliquer autre chose ... que se passe-t-il si un clic provient d'une "carte" dans un cardview et que l'autre clic provient d'une option de menu, et le troisième d'un bouton dans une vue. Je ne suis pas sûr que les trois sources d'événements seraient accessibles via le 'public void onClick (View v)'. À moins que je ne comprenne pas ce que signifie la référence 'View v' ...? – Maxcot

+0

@Maxcot tous les éléments de l'interface utilisateur que vous avez mentionnés étendent la classe 'View'. Les aura spécifiés dans un fichier XML, qui appartient à une activité ou fonctionne comme un élément ListView. Cependant, dans le XML, vous devez déclarer un identifiant unique pour chaque élément, vous voulez vous comporter de manière séparée.Tous ces identifiants sont accessibles via la classe 'R'. Il est donc possible d'y accéder dans une classe onClickListener. J'espère que vous pourriez suivre mon explication – Pynnie

0

Vous pouvez utiliser ci-dessous le code snipet mentionné dans le lien ci-dessous

Handle click item in Recycleview

Dans ce onClick et onItemClick passer outre l'auditeur que vous pouvez mettre en œuvre les deux boutons d'action flottante et Vignettes la position des événements clic sage

0

Pour effectuer la même opération sur événement clic de vue différent ou viewGroup mettre en œuvre une classe anonyme pour OnClickListener comme

View.OnClickListener mOnClickListener= new View.OnClickListener() { 
@Override public void onClick(View v) { /*do your code */ }}; 

ou appelez dans votre activité

mbutton.setOnClickListener(mOnClickListener); 
    mcardView.setOnClickListener(mOnClickListener);