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.
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.
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
.
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
.