I am using a BottomSheetDialogFragment class with Navigation Architecture component. I am following the Single activity pattern and therefore i have only one activity and several fragments. Below is my code.
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
}
}
And this is how i open the dialog in my navigation.xml from my main fragment:
<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" />
Now i want to pass data FROM the bottom sheet to the main fragment.
Is there a proper way to do this? Can someone please help me.
Thank you.
As of Navigation 2.3.0-alpha02
, Navigation has built in support for Returning a result to a previous destination.
This works in two parts, your first fragment (the one wanting to receive the result) would use navController.currentBackStackEntry?.savedStateHandle
to get a reference to the SavedStateHandle
associated with its NavBackStackEntry
in the NavController. Then, it can observe
a particular key to get a callback whenever that key changes.
The second fragment (the one delivering the result, i.e., your LogoBottomSheetFragment
) would get a reference to that exact same SavedStateHandle
by using navController.previousBackStackEntry?.savedStateHandle
. When that second fragment calls set
on the SavedStateHandle
, that result is then made available for the first fragment.
Note that there are some DialogFragment specific considerations to keep in mind - because the previous fragment is RESUMED
even when the BottomSheetFragment
is being shown, the result will instantly be sent to your first fragment.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With