Saya menggunakan kelas BottomSheetDialogFragment dengan komponen Arsitektur Navigasi. Saya mengikuti pola aktivitas tunggal dan oleh karena itu saya hanya memiliki satu aktivitas dan beberapa fragmen. Di bawah ini adalah kode saya.

BottomSheetDialogFragment.kt

class LogoBottomSheetFragment : BottomSheetDialogFragment() {

private var _binding: FragmentBottomSheetAccountLogoBinding? = null
private val binding get() = _binding!!

override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    _binding = FragmentBottomSheetAccountLogoBinding.inflate(inflater, container, false)

    return binding.root
}

override fun onDestroyView() {
    super.onDestroyView()
    _binding = null
}
}

Dan inilah cara saya membuka dialog di navigation.xml saya dari fragmen utama saya:

    <dialog
    android:id="@+id/logoBottomSheetFragment"
    android:name="com.th3pl4gu3.locky.ui.main.add.account.LogoBottomSheetFragment"
    android:label="LogoBottomSheetFragment"
    tools:layout="@layout/fragment_bottom_sheet_account_logo" />

Sekarang saya ingin meneruskan data DARI lembar bawah ke fragmen utama.

Apakah ada cara yang tepat untuk melakukan ini? Dapatkah seseorang tolong bantu saya.

Terima kasih.

4
Mervin Hemaraju 19 April 2020, 19:19

1 menjawab

Jawaban Terbaik

Mulai Navigasi 2.3.0-alpha02, Navigasi telah dukungan bawaan untuk Mengembalikan hasil ke tujuan sebelumnya.

Ini berfungsi dalam dua bagian, fragmen pertama Anda (yang ingin menerima hasilnya) akan menggunakan navController.currentBackStackEntry?.savedStateHandle untuk mendapatkan referensi ke SavedStateHandle yang terkait dengan NavBackStackEntry di NavController. Kemudian, itu bisa observe kunci tertentu untuk mendapatkan panggilan balik setiap kali kunci itu berubah.

Fragmen kedua (yang memberikan hasil, yaitu LogoBottomSheetFragment Anda) akan mendapatkan referensi ke SavedStateHandle yang sama persis dengan menggunakan navController.previousBackStackEntry?.savedStateHandle. Ketika fragmen kedua memanggil set pada SavedStateHandle, hasil tersebut kemudian tersedia untuk fragmen pertama.

Perhatikan bahwa ada beberapa pertimbangan khusus DialogFragment yang perlu diingat - karena fragmen sebelumnya adalah RESUMED bahkan ketika BottomSheetFragment ditampilkan, hasilnya akan langsung dikirim ke fragmen pertama Anda.

7
ianhanniballake 19 April 2020, 19:28