Saya menggunakan paket kompatibilitas untuk menggunakan Fragmen dengan Android 2.2. Saat menggunakan fragmen, dan menambahkan transisi di antara mereka ke backstack, saya ingin mencapai perilaku onResume yang sama dari suatu aktivitas, yaitu setiap kali sebuah fragmen dibawa ke "latar depan" (terlihat oleh pengguna) setelah keluar dari backstack, saya ingin semacam callback diaktifkan di dalam fragmen (misalnya untuk melakukan perubahan tertentu pada resource UI bersama).
Saya melihat bahwa tidak ada callback bawaan dalam kerangka fragmen. apakah ada praktik yang baik untuk mencapai ini?
onCreateView
yang akan dipanggil untuk fragmen setelah pop.Jawaban:
Karena kurangnya solusi yang lebih baik, saya membuat ini berfungsi untuk saya: Asumsikan saya memiliki 1 aktivitas (MyActivity) dan beberapa fragmen yang saling menggantikan (hanya satu yang terlihat pada satu waktu).
Di MyActivity, tambahkan listener ini:
(Seperti yang Anda lihat, saya menggunakan paket kompatibilitas).
Implementasi getListener:
MyFragment.onFragmentResume()
akan dipanggil setelah tombol "Kembali" ditekan. beberapa peringatan:FragmentTransaction.addToBackStack()
)sumber
Saya telah sedikit mengubah solusi yang disarankan. Bekerja lebih baik untuk saya seperti itu:
sumber
getFragments()
di SupportFragmentManager ... -1: - /Setelah
popStackBack()
Anda dapat menggunakan callback berikut: dionHiddenChanged(boolean hidden)
dalam fragmen Andasumber
Bagian berikut di Android Developers menjelaskan mekanisme komunikasi Membuat callback peristiwa ke aktivitas . Mengutip satu baris darinya:
Edit: Fragmen memiliki
onStart(...)
yang dipanggil saat fragmen terlihat oleh pengguna. Demikian pulaonResume(...)
saat terlihat dan aktif berjalan. Ini terkait dengan rekan aktivitas mereka. Singkatnya: gunakanonResume()
sumber
Jika sebuah fragmen diletakkan di backstack, Android akan menghancurkan tampilannya. Instance fragmen itu sendiri tidak dimatikan. Cara sederhana untuk memulai adalah dengan mendengarkan acara onViewCreated, dan menempatkan Anda logika "onResume ()" di sana.
sumber
Dalam aktivitas saya onCreate ()
Gunakan metode ini untuk menangkap Fragmen tertentu dan memanggil onResume ()
sumber
Sedikit ditingkatkan dan dibungkus menjadi solusi manajer.
Hal-hal yang perlu diingat. FragmentManager bukan singleton, ia hanya mengelola Fragmen dalam Aktivitas, jadi dalam setiap aktivitas akan menjadi baru. Selain itu, solusi ini sejauh ini tidak memperhitungkan ViewPager yang memanggil metode setUserVisibleHint () yang membantu mengontrol visibilitas Fragmen.
Jangan ragu untuk menggunakan kelas-kelas berikut saat menangani masalah ini (menggunakan injeksi Dagger2). Panggilan dalam Aktivitas:
FragmentBackstackStateManager.java:
FragmentBackstackChangeListenerImpl.java:
BackstackCallback.java:
sumber
Ini adalah jawaban yang benar, Anda bisa memanggil onResume () asalkan fragmen dilampirkan ke aktivitas. Atau, Anda dapat menggunakan onAttach dan onDetach
sumber
onResume () untuk fragmen berfungsi dengan baik ...
sumber
dan tingkat terakhir Frament Anda dari RootFragment untuk melihat efeknya
sumber
Solusi saya adalah mendapatkan judul bilah tindakan saat ini di Fragmen sebelum menyetelnya ke judul baru. Dengan cara ini, setelah Fragmen muncul, saya dapat mengubah kembali ke judul tersebut.
sumber
Saya telah menggunakan enum
FragmentTags
untuk mendefinisikan semua kelas fragmen saya.lulus
FragmentTags.TAG_FOR_FRAGMENT_A.name()
sebagai tag fragmen.dan sekarang
sumber