web-dev-qa-db-fra.com

Android: Pourquoi un clic long déclenche-t-il également un clic normal?

J'ai un ListView avec des auditeurs pour un long clic et un clic régulier.

Pourquoi, lorsque j'appuie longuement sur un élément de la liste, l'événement de clic normal est également appelé?

J'ai besoin d'avoir deux fonctions distinctes pour les différents clics.

114
mellowg

De écouteurs d'événements :

onLongClick () - Cela renvoie un booléen pour indiquer si vous avez consommé l'événement et il ne doit pas être poursuivi. Autrement dit, retournez true pour indiquer que vous avez géré l'événement et qu'il devrait s'arrêter ici; retournez false si vous ne l'avez pas traité et/ou l'événement doit continuer à tout autre écouteur au clic.

Renvoyez-vous true à partir de votre onLongClick() et obtenez-vous toujours l'événement de clic normal?

Modifié pour ajouter : Pour un ListView, vous utilisez peut-être OnItemLongClickListener. La onItemLongClick() y utilise une valeur de retour booléenne similaire pour indiquer si elle a consommé l'événement.

262
erichamion

Pour reformuler la réponse en termes plus simples:

Donné:

@Override
public boolean onLongClick(View view) {

    return true; // or false
}
  • return true signifie que l'événement est consommé. Il est géré. Aucun autre événement de clic ne sera notifié.
  • return false signifie que l'événement n'est pas consommé. Tout autre événement de clic continuera de recevoir des notifications.

Donc, si vous ne voulez pas que onClick soit également déclenché après un onLongClick, vous devriez return true de l'événement onLongClick.

40
Suragch

Assurez-vous de remplacer OnClickListener pour votre méthode onClick. Assurez-vous également que vous remplacez OnLongClickListener pour votre méthode onLongClick. Et assurez-vous que votre méthode onLongClick renvoie true, car cela consommera le onClick.

18
Alex Lockwood