Ketika saya menunjukkan satu fragmen (yang layar penuh dengan #77000000
latar belakang) di atas fragmen lain (sebut saja utama), fragmen utama saya masih bereaksi terhadap klik (kita dapat mengklik tombol meskipun kita tidak melihatnya).
Pertanyaan : bagaimana mencegah klik pada fragmen pertama (utama)?
EDIT
Sayangnya, saya tidak bisa menyembunyikan fragmen utama, karena saya menggunakan latar belakang transparan pada fragmen kedua (jadi, pengguna dapat melihat apa yang ada di belakang).
android
android-fragments
Dmitry Zaytsev
sumber
sumber
Visibility
dari Andamain
Fragment
untukGONE
ketika Anda tidak menggunakannya.onClick
metode tidak mengembalikan apa pun. Tapi Anda memberikan ide, terima kasih (saya akan segera mengirim jawaban).Jawaban:
Setel
clickable
properti pada tampilan fragmen kedua menjadi true. Tampilan akan menangkap acara sehingga tidak akan diteruskan ke fragmen utama. Jadi jika tampilan fragmen kedua adalah tata letak, ini akan menjadi kode:sumber
RelativeLayout
dalam fragmen, dan saya mengatur seluruh tampilan denganclickeable
properti. Solusi dari @Dmitry menyelesaikan masalah saya.Solusinya cukup sederhana. Dalam fragmen kedua kami (yang tumpang tindih dengan fragmen utama kami), kami hanya perlu menangkap
onTouch
peristiwa:sumber
Cukup tambahkan
clickable="true"
danfocusable="true"
ke tata letak indukJika Anda menggunakan
AndroidX
, coba inisumber
focuseable
sebenarnya tidak perlu.focusable="true"
sini hanya untuk menghindari peringatan di Android Studio.Anda harus menyembunyikan fragmen pertama saat Anda menunjukkan Fragmen kedua jika dua fragmen ditempatkan dalam tampilan wadah yang sama.
sumber
Anda perlu menambahkan
android:focusable="true"
denganandroid:clickable="true"
Clickable
berarti dapat diklik oleh perangkat penunjuk atau disadap oleh perangkat sentuh.Focusable
berarti dapat memperoleh fokus dari perangkat input seperti keyboard. Perangkat input seperti keyboard tidak dapat memutuskan tampilan mana yang akan dikirimi aktivitas input berdasarkan input itu sendiri, sehingga mereka mengirimnya ke tampilan yang memiliki fokus.sumber
Ada lebih dari satu solusi yang sebagian dari kita berkontribusi pada utas ini tetapi juga saya ingin menyebutkan satu solusi lain. Jika Anda tidak suka meletakkan yang dapat diklik dan fokus sama dengan benar untuk setiap tata letak ViewGroup dalam XML seperti saya. Anda juga dapat meletakkannya di pangkalan Anda jika Anda memiliki satu seperti di bawah ini;
Saya harap ini membantu bagi mereka yang membenci tata letak XML.
sumber
Jawaban yang dapat diterima akan "bekerja", tetapi juga akan menyebabkan biaya kinerja (penarikan berlebih, pengukuran ulang pada perubahan orientasi) karena fragmen di bagian bawah masih ditarik. Mungkin Anda harus menemukan fragmen dengan tag atau ID dan mengatur visibilitas ke GONE atau VISIBLE ketika Anda perlu menampilkannya lagi.
Di Kotlin:
Solusi ini lebih disukai daripada alternatif
hide()
danshow()
metodeFragmentTransaction
ketika Anda menggunakan animasi. Anda cukup menyebutnya darionTransitionStart()
danonTransitionEnd()
dariTransition.TransitionListener
.sumber
Metod 1:
Anda dapat menambahkan ke semua tata letak fragmen
Metod 2: (Secara terprogram)
Perpanjang semua fragmen dari
FragmentBase
dll. Kemudian tambahkan kode ini keFragmentBase
sumber
Apa yang dapat Anda lakukan adalah Anda dapat memberikan klik Kosong ke tata letak fragmen sebelumnya dengan menggunakan properti onClick ke tata letak induk dari fragmen utama dan dalam aktivitas Anda dapat membuat fungsi
doNothing(View view)
dan tidak menulis apa pun di dalamnya. Ini akan melakukannya untuk Anda.sumber
Ini terdengar seperti kasing untuk DialogFragment. Kalau tidak, dengan Fragment Manager, komit satu untuk disembunyikan dan yang lain untuk ditampilkan. Itu berhasil bagi saya.
sumber
Penambahan
android:clickable="true"
tidak berfungsi untuk saya. Solusi ini tidak berfungsi di CoordinatorLayout saat itu adalah tata letak induk. Karena itulah saya menjadikan RelativeLayout sebagai tata letak induk, ditambahkanandroid:clickable="true"
padanya dan menempatkan CoordinatorLayout pada RelativeLayout ini.sumber
Saya memiliki beberapa fragmen dengan xml yang sama.
Setelah menghabiskan berjam-jam, saya melepas
setPageTransformer
dan mulai bekerjaSaya memiliki logika scalling.
sumber