Saya menggunakan NavigationComponent di Aplikasi saya.

Saya memiliki alur khusus di mana setelah mengklik tombol BottomSheetDialogFragment aplikasi harus menavigasi ke fragmen lain. Tetapi ketika Fragmen itu muncul, saya perlu menavigasi kembali ke BottomSheetDialogFragment sebelumnya.

Untuk beberapa alasan BottomSheetDialogFragment ditutup secara otomatis.

Frag A : click on a button  
Frag A -> Dialog B : click on a button  
Frag A -> Dialog B -> Frag C : pop Frag C from the stack  
Frag A : Dialog B was automatically dismissed =;/  

Bagaimana cara mencegah pemecatan itu?


T: Mengapa saya perlu BottomSheetDialogFragment tidak ditutup?
A: Saya mendengarkan hasil dari fragmen yang dibuka melalui LiveData. Karena mengabaikan BottomSheetDialogFragment itu tidak pernah menerima hasilnya.

2
Augusto Carmo 24 April 2021, 00:33

1 menjawab

Jawaban Terbaik

Ini tidak mungkin. Tujuan dialog menerapkan antarmuka FloatingWindow yang menyatakan:

Tujuan yang mengimplementasikan antarmuka ini akan secara otomatis dikeluarkan dari back-stack saat Anda menavigasi ke tujuan baru.

Jadi diharapkan tujuan dialog secara otomatis muncul dari back-stack saat Anda menavigasi ke tujuan <fragment>. Ini tidak kasusnya ketika menavigasi antara beberapa tujuan dialog (mereka dapat ditumpuk di atas satu sama lain).

Masalah ini menjelaskan lebih banyak tentang batasan di sini, yaitu:

  1. Dialog adalah jendela terpisah yang selalu berada di atas jendela aktivitas Anda. Ini berarti bahwa dialog akan terus mencegat tombol kembali sistem, apa pun status FragmentManager yang mendasarinya atau FragmentTransactions apa yang Anda lakukan.

  2. Operasi pada wadah fragmen (yaitu, tujuan normal Anda) tidak memengaruhi fragmen dialog. Sama jika Anda melakukan FragmentTransactions pada FragmentManager bersarang.

Jadi, setelah Anda menavigasi ke tujuan <fragment> Anda, satu-satunya cara agar tombol kembali sistem benar-benar berfungsi adalah agar semua jendela mengambang muncul (jika tidak, mereka akan mencegat tombol kembali sebelum yang lainnya) karena jendela tersebut selalu mengambang di atas konten.

Ini bukan batasan yang dikenakan oleh Komponen Navigasi - masalah yang sama berlaku untuk penggunaan BottomSheetDialogFragment apa pun terkait tumpukan kembali Fragmen dan tombol kembali sistem.

1
ianhanniballake 23 April 2021, 21:42