Dokumen mengatakan ini untuk dismiss()
metode dari Dialog
kelas:
Singkirkan dialog ini, hapus dari layar. Metode ini dapat dipanggil dengan aman dari utas mana pun. Perhatikan bahwa Anda tidak boleh mengganti metode ini untuk melakukan pembersihan saat dialog ditutup, sebagai gantinya terapkan di
onStop()
.
Dalam kode saya, yang saya lakukan hanyalah menelepon getDialog().dismiss()
untuk menutupnya. Tetapi saya tidak melakukan hal lain atau bahkan menggunakan onStop()
. Jadi saya bertanya dengan tepat bagaimana cara menutup dengan benar DialogFragment
untuk menghindari kebocoran memori, dll ..
protected void showDialogFragment(final DialogFragment fragment) {final FragmentTransaction fTransaction = getSupportFragmentManager().beginTransaction(); fTransaction.addToBackStack(null); fragment.show(fTransaction, "dialog");}
Maaf untuk satu kapal yang buruk! Tapi ya Anda mungkin benar, jadi untuk saat ini saya telah menulis cara lain untuk menutup DialogFragments saya. Cara saya mengabaikan mereka menggunakan metode reject () hanya menemukan fragmen dengan tag dan kemudian menjalankan reject () di atasnya jika bukan null. Oh dan ya, saya sedangnew
memasukkan fragmen tepat sebelum meneruskannya ke metode itu.Saya pikir cara yang lebih baik untuk menutup a
DialogFragment
adalah ini:Dengan cara ini Anda tidak perlu memiliki referensi ke
DialogFragment
dan dapat menutupnya dari mana saja.sumber
Mengapa Anda tidak mencoba hanya menggunakan kode ini:
Jika Anda ingin menutup Fragmen Dialog dengan sendirinya. Anda cukup meletakkan kode ini di dalam fragmen dialog tempat Anda ingin menutup Dialog.
Sebagai contoh:
Ini akan menutup Fragmen Dialog terbaru yang ditampilkan di layar.
Semoga bisa membantu Anda.
sumber
Saya memberikan suara positif untuk jawaban Terel. Saya hanya ingin memposting ini untuk semua pengguna Kotlin:
sumber
Jawaban Terel Versi Kotlin
sumber
Anda harus memecat Anda
Dialog
dionPause()
sehingga menimpa itu.Juga sebelum menutup Anda dapat memeriksa
null
dan menampilkan seperti di bawah ini cuplikan:sumber
DialogFragment
oleh google tidak menunjukkanonPause()
metode yang digunakan sama sekali. Tapi saya rasa saya melihat apa yang Anda lakukan. Apa gunanya jika pengguna tidak menelepononPause()
. Saat itulah sistem mengetahui bahwa fragmen sedang dipanggil. Bagaimana dengan kapan, misalnya pengguna membatalkan. Apa cara yang lebih baik untuk menutupnya dalam kasus itu?Ada referensi ke dokumen resmi ( DialogFragment Reference ) di jawaban lain, tetapi tidak disebutkan contoh yang diberikan di sana:
Untuk kebutuhan saya, saya mengubahnya menjadi:
sumber
Menambahkan ke jawaban lain, saat memiliki
DialogFragment
panggilan layar penuhdismiss()
tidak akan memunculkan DialogFragment dari backstack fragmen. Solusinya adalah dengan memanggilonBackPressed()
aktivitas induk.Sesuatu seperti ini:
CustomDialogFragment.kt
sumber
Panggil saja pemberhentian () dari fragmen yang ingin Anda tutup.
sumber
Saya menemukan bahwa ketika fragmen saya didefinisikan dalam grafik navigasi dengan
<fragment>
tag (untuk dialogfragmen layar penuh), dialogfragmen tidak akan ditutup dengandismiss()
perintah. Sebagai gantinya, saya harus mengeluarkan tumpukan belakang:Namun, jika dialogfragmen yang sama ditentukan dalam grafik navigasi dengan
<dialog>
tag,dismiss()
berfungsi dengan baik.sumber
sumber