Android: Mengapa klik lama juga memicu klik normal?

126

Saya memiliki ListView dengan pendengar untuk klik yang lama dan klik biasa.

Mengapa, ketika saya menekan lama item daftar, event klik biasa dipanggil juga?

Saya perlu memiliki dua fungsi terpisah untuk klik yang berbeda.

mellowg
sumber

Jawaban:

284

Dari Pendengar Acara :

onLongClick () - Ini mengembalikan boolean untuk menunjukkan apakah Anda telah menggunakan acara dan tidak boleh dibawa lebih jauh. Artinya, mengembalikan true untuk menunjukkan bahwa Anda telah menangani kejadian tersebut dan harus berhenti di sini; return false jika Anda belum menanganinya dan / atau acara harus dilanjutkan ke listener on-click lainnya.

Apakah Anda kembali truedari Anda onLongClick()dan masih mendapatkan peristiwa klik biasa?

Diedit untuk menambahkan : Untuk ListView, Anda mungkin menggunakan OnItemLongClickListener. The onItemLongClick()ada menggunakan nilai kembali boolean mirip dengan menunjukkan apakah itu dikonsumsi acara tersebut.

erichamion
sumber
1
Untuk mengatur myListView.setOnItemLongClickListener(this); opsi, Anda harus Mengganti fungsi public boolean onItemLongClick(...). Di sini Anda hanya perlu return trueyang menunjukkan bahwa LongClick telah diaktifkan dan akan membatalkan pemicu pada klik biasa. Jika Anda mengembalikan false maka itu akan memicu klik biasa juga.
Brandon
bagaimana dengan situasi lainnya, ketika saya perlu membedakan antara klik panjang dan klik biasa untuk mengambil tindakan sesuai dengan itu
Muhammed Refaat
@erichamion Saya mencoba solusi Anda untuk masalah serupa, tetapi tidak berhasil. Saya menghargai setiap wawasan atau pemikiran yang dapat Anda berikan, terletak di sini: stackoverflow.com/questions/47783631/…
AJW
50

Mengulangi jawaban dalam istilah yang lebih sederhana:

Diberikan:

@Override
public boolean onLongClick(View view) {

    return true; // or false
}
  • return trueberarti acara tersebut dikonsumsi. Itu ditangani. Tidak ada peristiwa klik lain yang akan diberitahukan.
  • return falseberarti acara tersebut tidak dikonsumsi. Peristiwa klik lainnya akan terus menerima pemberitahuan.

Jadi jika Anda tidak ingin onClickjuga dipicu setelah onLongClick, maka Anda harus return truedari onLongClickacara tersebut.

Suragch
sumber
2
Jawaban super sempurna jika kita memasukkan nilai benar maka itu hanya menangani klik panjang jika kita memasukkan salah maka peristiwa klik dan tekan lama terjadi sekaligus
Pir Fahim Shah
Jawaban yang sangat bagus.
Sam Chen
20

Pastikan Anda mengganti metode OnClickListenerAnda onClick. Juga pastikan Anda mengganti metode OnLongClickListenerAnda onLongClick. Dan pastikan bahwa onLongClickmetode Anda kembali true, karena ini akan menggunakan file onClick.

Alex Lockwood
sumber
Saya menambahkan true dalam metode onLongClick saya tetapi masih memiliki masalah karena metode onClick saya tidak aktif setelahnya. Saya akan menghargai pemikiran atau ide apa pun tentang cara menyelesaikannya, yang terletak di sini: stackoverflow.com/questions/47783631/…
AJW
0

Anda dapat mengimplementasikan setOnLongClickListenerpembuatan instance new View.OnClickListener()atau new View.OnLongClickListener(), jika Anda membuat Long click dan mengimplementasikan OnclickListener normal, Anda akan mendapatkan error ini karena satu klik yang mengaktifkan metode ini. Anda harus menggunakan new View.OnLongClickListener()hanya untuk menangkap klik panjang

Matheus Padovani
sumber