Saya memiliki objek tempat teks berputar dan menampilkan pesan status. Ketika pesan berubah, saya ingin acara klik objek berubah untuk membawa Anda ke aktivitas yang terkait dengan pesan tersebut.
Jadi, saya punya TextView mTitleView
dan saya menugaskan acara seperti ini.
public void setOnTitleClickListener(OnClickListener listener) {
mTitleView.setOnClickListener(listener);
}
Bagaimana cara menghapus acara klik itu? Ada beberapa pesan status yang tidak memiliki area yang dapat ditindaklanjuti sehingga saya ingin mematikan acara klik. Saya juga ingin dapat melihat-lihat peristiwa klik ini dan membuangnya dengan benar, tetapi saya tidak yakin dengan praktik terbaik.
a better design
apakah Anda menyiratkan implikasi kinerja atau Anda hanya mengatakan itu agak tidak menyenangkan?Perhatikan bahwa jika tampilan tidak dapat diklik (misalnya TextView), pengaturan
setOnClickListener(null)
akan berarti tampilan tersebut dapat diklik. GunakanmMyView.setClickable(false)
jika Anda tidak ingin tampilan Anda dapat diklik. Misalnya, jika Anda menggunakan xml drawable untuk latar belakang, yang menunjukkan warna berbeda untuk status berbeda, jika tampilan Anda masih dapat diklik, pengguna dapat mengkliknya dan warna latar belakang yang berbeda akan ditampilkan, yang mungkin terlihat aneh.sumber
Mungkin
setOnClickListener(null)
?sumber
Pengaturan
setOnClickListener(null)
adalah ide yang baik untuk menghapus pendengar klik saat runtime.Dan juga seseorang berkomentar bahwa menelepon
View.hasOnClickListeners()
setelah ini akan kembalitrue
, TIDAK teman saya.Berikut ini implementasi yang
hasOnClickListeners()
diambil dariandroid.view.View
kelasTerima kasih Tuhan. Itu memeriksa
null
.Jadi semuanya aman. Nikmati :-)
sumber
Jawaban di atas tampak tidak jelas dan tidak dapat diandalkan. Saya mencoba melakukan ini dengan ImageView dalam Layout Relatif sederhana dan tidak menonaktifkan acara onClick.
Apa yang berhasil bagi saya adalah menggunakan setEnabled.
Anda kemudian dapat memeriksa apakah Tampilan diaktifkan dengan:
Pilihan lain adalah menggunakan setContentDescription (String string) dan String getContentDescription () untuk menentukan status tampilan.
sumber
Sederhananya, itu berhasil bagi saya
sumber
sumber
Cukup menginisialisasi ulang item seperti di bawah ini akan melakukan trik. Itu akan menghapus onclick, onlonglick, onitemclick, onitemlongclick berdasarkan item
mTitleView = findViewById (R.id.mTitleView);
sumber