Di android, sebagian besar metode event listener mengembalikan nilai boolean. Apa arti nilai benar / salah itu? apa yang akan menghasilkan peristiwa selanjutnya?
class MyTouchListener implements OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event) {
logView.showEvent(event);
return true;
}
}
Sehubungan dengan contoh di atas, jika return true dalam metode onTouch , saya menemukan setiap peristiwa sentuh (BAWAH, ATAS, PINDAH, dll) telah ditangkap sesuai dengan logView saya . Sebaliknya, jika return false, hanya peristiwa TURUN yang ditangkap. Jadi tampaknya pengembalian salah akan mencegah acara menyebar. Apakah saya benar ?
Selain itu, dalam OnGestureListener , banyak metode harus mengembalikan nilai boolean juga. Apakah mereka memiliki arti yang sama?
Dari dokumentasi: http://developer.android.com/reference/android/view/View.OnTouchListener.html#onTouch(android.view.View , android.view.MotionEvent)
"Benar jika pendengar telah mengonsumsi acara tersebut, salah jika tidak."
Jika Anda mengembalikan true, acara diproses. Jika salah, itu akan pergi ke lapisan berikutnya ke bawah.
sumber
Nilai boolean menentukan apakah acara tersebut dikonsumsi atau tidak.
Ya, Anda benar. Jika Anda mengembalikan false, pendengar berikutnya akan menangani acara tersebut. Jika mengembalikan nilai true, peristiwa tersebut dikonsumsi oleh pendengar Anda dan tidak dikirim ke metode selanjutnya.
sumber
true
berarti Anda mengonsumsi acara dan menginginkan sisa acara dalam isyarat - pendengar / tampilan lain tidak akan menerima acara tersebut.false
berarti biarkan orang lain menangani acara tersebut. Ini sebenarnya sedikit lebih spesifik dari itu; lihat jawabanku.Semua jawaban di atas benar tetapi hasilnya berbeda jika Lihat
clickable
atau tidakclickable
Contoh , saya punya
LinearLayout
berisi 1Button
dan 1TextView
seperti iniDalam Aktivitas, saya memiliki kode suka
Kasus 1
Linear onTouch return **FALSE**
,Button onTouch return **FALSE**
,TextView onTouch return **FALSE**
Klik pada Tombol
Klik pada TextView
Klik LinearLayout
Kasus 2
Linear onTouch return **FALSE**
,Button onTouch return **TRUE**
,TextView onTouch return **TRUE**
Klik pada Tombol
Klik pada TextView
Klik LinearLayout
Kasus 3
Linear onTouch return **TRUE**
,Button onTouch return **FALSE**
,TextView onTouch return **FALSE**
Klik pada Tombol
Klik pada TextView
Klik LinearLayout
Catatan
TextView
adalahnot clickable
, itu akan menjadi dapat diklik jika kita setandroid:clickable="true"
di xml OR saat kita settextView.setOnClickListener(...)
event MOVE
dapat memanggil lebih dari log saya (itu berdasarkan bagaimana Anda mengetuk)Ringkasan
onTouch
kembalitrue
atau lihatclickable
, View akan menerima semuaonTouchEvent
onTouch
kembalifalse
dan tampilan tidakclickable
, tampilan tidak akan menerima onTouchEvent BERIKUTNYA (itu orang tua mungkin menerimanya)Semoga membantu
DEMO
sumber
Saya kehilangan hampir satu hari dalam pemecahan masalah, masih saya menemukan, bahwa fungsi onTouch saya dipanggil 2 kali saat menggunakan true dan 1 kali saat menggunakan false.
sumber
event.getAction()
karena jika Anda kembalifalse
pada acara ACTION_DOWN, acara ACTION_UP diabaikan oleh pendengarDari Android-document :
Catatan: Android akan memanggil penangan kejadian terlebih dahulu, kemudian penangan default yang sesuai dari definisi kelas kedua. Dengan demikian, mengembalikan true dari event listener ini akan menghentikan penyebaran event ke event listener lain dan juga akan memblokir callback ke event handler default di View. Jadi, pastikan Anda ingin menghentikan acara saat mengembalikan true.
sumber