Mam ListView z odbiornikami dla długiego kliknięcia i zwykłego kliknięcia.
Dlaczego, gdy długo naciskam element listy, wywoływane jest również zwykłe zdarzenie kliknięcia?
Muszę mieć dwie oddzielne funkcje dla różnych kliknięć.
źródło
Mam ListView z odbiornikami dla długiego kliknięcia i zwykłego kliknięcia.
Dlaczego, gdy długo naciskam element listy, wywoływane jest również zwykłe zdarzenie kliknięcia?
Muszę mieć dwie oddzielne funkcje dla różnych kliknięć.
Od słuchaczy zdarzeń :
onLongClick () - zwraca wartość logiczną wskazującą, czy zdarzenie zostało wykorzystane i nie powinno być dalej przenoszone. Oznacza to, że zwraca true, aby wskazać, że zdarzenie zostało obsłużone i powinno się na tym zatrzymać; zwraca wartość false, jeśli nie została przez Ciebie obsłużona i / lub zdarzenie powinno zostać przekazane innym odbiornikom po kliknięciu.
Czy wracasz true
ze swojego onLongClick()
i nadal otrzymujesz normalne zdarzenie kliknięcia?
Edytowano w celu dodania : w przypadku ListView możesz używać OnItemLongClickListener
. onItemLongClick()
Nie wykorzystuje podobną wartość logiczną powrotny do wskazania, czy spożywane zdarzenie.
myListView.setOnItemLongClickListener(this);
opcję, musisz zastąpić funkcjępublic boolean onItemLongClick(...)
. Tutaj wystarczy,return true
co wskazuje, że LongClick został aktywowany i anuluje wyzwalacz przy zwykłym kliknięciu. Jeśli zwrócisz wartość false, spowoduje to również zwykłe kliknięcie.Przedstawiając odpowiedź w prostszych słowach:
Dany:
return true
oznacza, że zdarzenie zostało skonsumowane. To jest obsługiwane. Żadne inne zdarzenia związane z kliknięciami nie będą powiadamiane.return false
oznacza, że wydarzenie nie jest konsumowane. Wszelkie inne zdarzenia związane z kliknięciami będą nadal otrzymywać powiadomienia.Więc jeśli nie chcesz,
onClick
aby został wyzwolony również po zdarzeniuonLongClick
, powinieneśreturn true
z tegoonLongClick
zdarzenia.źródło
Upewnij się, że
OnClickListener
TwojaonClick
metoda jest nadrzędna . Upewnij się również, żeOnLongClickListener
TwojaonLongClick
metoda jest nadrzędna . I upewnij się, że TwojaonLongClick
metoda zwracatrue
, ponieważ spowoduje to wykorzystanie plikuonClick
.źródło
Możesz wdrożyć
setOnLongClickListener
tworzenie instancjinew View.OnClickListener()
lubnew View.OnLongClickListener()
, jeśli utworzysz długie kliknięcie i zaimplementujesz normalny OnclickListener, otrzymasz te błędy aktywacji metody jednym kliknięciem. Należy używaćnew View.OnLongClickListener()
do łapania tylko długich kliknięćźródło