Android: Uzun tıklama neden normal bir tıklamayı da tetikliyor?


126

Uzun tıklama ve normal tıklama için dinleyicileri olan bir ListView var.

Bir liste öğesine uzun süre bastığımda neden normal tıklama etkinliği de çağrılıyor?

Farklı tıklamalar için iki ayrı işleve ihtiyacım var.

Yanıtlar:


284

Gönderen Etkinlik İşleyicilere :

onLongClick () - Bu, olayı tüketip tüketmediğinizi ve daha fazla taşınmaması gerektiğini belirtmek için bir boole döndürür. Yani, olayı hallettiğinizi ve olay burada durması gerektiğini belirtmek için true döndürün; Eğer işlem yapmadıysanız ve / veya olayın diğer tıklama dinleyicilerinde devam etmesi gerekiyorsa false döndür.

Eğer dönüyor true, hesabınızla ilgili onLongClick()ve hala normal bir tıklama olayını almak?

Eklemek için düzenlendi : Bir ListView için kullanıyor olabilirsiniz OnItemLongClickListener. onItemLongClick()O olayı tüketilen belirtmek için benzer bir Boole değeri iade orada kullanır.


1
myListView.setOnItemLongClickListener(this); Seçeneği ayarlamak için , işlevi geçersiz kılmanız gerekir public boolean onItemLongClick(...). Burada return true, LongClick'in etkinleştirildiğini gösteren ve normal tıklamada tetikleyiciyi iptal edeceğini gösteren tek yapmanız gereken . Yanlış döndürürseniz, normal tıklamayı da tetikler.
Brandon

ya diğer durum, buna göre uzun tıklama ile normal tıklama arasında farklılık göstermem gerektiğinde
Muhammed Refaat

@erichamion Benzer bir sorun için çözümünüzü şanssız olarak denedim. Sağlayabileceğiniz her türlü görüş veya düşünceniz şu adreste yer almaktadır: stackoverflow.com/questions/47783631/…
AJW

50

Cevabı daha basit terimlerle ifade etmek:

Verilen:

@Override
public boolean onLongClick(View view) {

    return true; // or false
}
  • return trueolayın tüketildiği anlamına gelir. Halledilir. Başka hiçbir tıklama etkinliği bildirilmeyecektir.
  • return falseolayın tüketilmediği anlamına gelir. Diğer tıklama olayları bildirim almaya devam edecektir.

Dolayısıyla, onClickbir'den sonra da tetiklenmek istemiyorsanız , olaydan onLongClickbaşlamalısınız .return trueonLongClick


2
Süper mükemmel cevap, eğer doğru değeri koyarsak, sadece uzun tıklamayla başa çıkarsak eğer yanlış koyarsak, hem tıklama hem de uzun basma olayı aynı anda gerçekleşir
Pir Fahim Shah

Mükemmel cevap.
Sam Chen

20

Emin geçersiz kılma emin olun OnClickListenersizin için onClickyöntemiyle. Ayrıca geçersiz kılma emin olun OnLongClickListenersizin için onLongClickyöntemiyle. Ve onLongClickyönteminizin geri döndüğünden emin olun true, çünkü bu onClick.


OnLongClick yöntemime true ekledim ancak onClick yöntemimin daha sonra çalışmaması nedeniyle hala bir sorunum var. Nasıl çözüleceğine dair tüm fikir ve düşüncelerim için minnettar olurum, burada yer almaktadır: stackoverflow.com/questions/47783631/…
AJW

0

Sen uygulayabileceği setOnLongClickListenerbir örneğini oluşturarak new View.OnClickListener()veya new View.OnLongClickListener()normal bir OnClickListener Eğer yöntemini aktive tek bir tıklama bu hataları alacak Uzun tıklama ve uygular oluşturursanız,. new View.OnLongClickListener()Yalnızca uzun tıklamaları yakalamak için kullanmalısınız

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.