Saya memiliki beberapa fragmen yang perlu menampilkan dialog biasa. Pada dialog ini, pengguna dapat memilih jawaban ya / tidak, dan fragmen harus berperilaku sesuai.
Sekarang, Fragment
kelas tidak memiliki onCreateDialog()
metode untuk ditimpa, jadi saya rasa saya harus mengimplementasikan dialog di luar, di dalamnya Activity
. Tidak apa-apa, tapi kemudian Activity
kebutuhan untuk melaporkan kembali jawaban yang dipilih entah bagaimana ke fragmen. Saya tentu saja bisa menggunakan pola panggilan balik di sini, jadi fragmen mendaftarkan dirinya di kelas Activity
with pendengar, dan Aktivitas akan melaporkan kembali jawabannya melalui itu, atau sesuatu seperti itu.
Tapi ini tampaknya menjadi kekacauan besar untuk tugas sederhana seperti menampilkan dialog ya-tidak yang "sederhana" dalam sebuah fragmen. Juga, dengan cara ini saya Fragment
akan menjadi kurang mandiri.
Adakah cara yang lebih bersih untuk melakukan ini?
Edit:
Jawaban atas pertanyaan ini tidak benar-benar menjelaskan secara detail bagaimana seseorang harus menggunakan DialogFragments untuk menampilkan dialog dari Fragmen. Jadi AFAIK, cara yang harus dilakukan adalah:
- Tampilkan Fragmen.
- Jika perlu, buat instance DialogFragment.
- Tetapkan Fragmen asli sebagai target DialogFragment ini, dengan
.setTargetFragment()
. - Tampilkan DialogFragment dengan .show () dari Fragmen aslinya.
- Ketika pengguna memilih beberapa opsi pada DialogFragment ini, beri tahu Fragmen asli tentang pilihan ini (mis. Pengguna mengklik 'ya'), Anda bisa mendapatkan referensi Fragmen asli dengan .getTarget ().
- Tutup DialogFragment.
sumber
Jawaban:
Anda harus menggunakan DialogFragment sebagai gantinya.
sumber
Activity
seluruhnya dengan menggunakanputFragment
dangetFragment
metodeFragmentManager
, memungkinkanDialogFragment
untuk melaporkan kembali langsung ke fragmen pemanggil (bahkan setelah orientasi berubah).Saya harus hati-hati meragukan jawaban yang diterima sebelumnya bahwa menggunakan DialogFragment adalah pilihan terbaik. Tujuan (utama) DialogFragment tampaknya untuk menampilkan fragmen yang merupakan dialog itu sendiri, bukan untuk menampilkan fragmen yang memiliki dialog untuk ditampilkan.
Saya yakin bahwa menggunakan aktivitas fragmen untuk menengahi dialog dan fragmen adalah opsi yang lebih disukai.
sumber
onCreateDialog
) akan segera dihentikan, saya tidak setuju dan mengatakan itulahDialogFragment
cara yang harus dilakukan.Berikut adalah contoh lengkap dari DialogFragment ya / tidak:
Kelas:
Untuk memulai dialog:
Anda juga dapat mengizinkan kelas mengimplementasikan onClickListener dan menggunakannya sebagai ganti listener yang disematkan.
Panggilan Balik ke Aktivitas
Jika Anda ingin mengimplementasikan callback, begini caranya dalam aktivitas Anda:
dan
Kelas panggilan balik:
Kemudian untuk melakukan callback dari sebuah fragmen, Anda perlu memastikan listener terpasang seperti ini:
Dan panggilan balik dilakukan seperti ini:
sumber
Bagi saya, itu adalah sebagai berikut-
MyFragment:
MyDialog:
Aktivitas:
Tata letak DialogFragment:
Seperti yang
dialogfragment_heightfixhiddenbtn
diperlihatkan oleh namanya , saya tidak dapat menemukan cara untuk memperbaiki bahwa tinggi tombol bagian bawah dipotong menjadi dua meskipun sudah dikatakanwrap_content
, jadi saya menambahkan tombol tersembunyi untuk "dipotong" menjadi dua. Maaf atas retasannya.sumber
setTargetFragment()
dibuat ulang dengan benar oleh sistem saat memulai ulang kumpulan Aktivitas / Fragmen setelah rotasi. Jadi referensi akan mengarah ke target baru secara otomatis.public interface ShowDialog { void showDialog(DialogFragment dialogFragment); }
di mana .test_dialog adalah kustom xml
sumber
Saya sendiri seorang pemula dan sejujurnya saya tidak dapat menemukan jawaban yang memuaskan yang dapat saya pahami atau terapkan.
Jadi, inilah tautan eksternal yang sangat membantu saya mencapai apa yang saya inginkan. Ini sangat mudah dan mudah diikuti juga.
http://www.helloandroid.com/tutorials/how-display-custom-dialog-your-android-application
INI YANG SAYA COBA UNTUK MENCAPAI KODE:
Saya memiliki MainActivity yang menghosting Fragmen. Saya ingin dialog muncul di atas tata letak untuk meminta masukan pengguna dan kemudian memproses masukan yang sesuai. Lihat tangkapan layar
Inilah tampilan onCreateView dari fragmen saya
Saya harap ini akan membantu Anda
Beri tahu saya jika ada kebingungan. :)
sumber
sumber