J'utilise BottomSheetDialogFragment pour afficher quelques paramètres personnalisés.
Exigence:
Lorsque je clique sur n'importe quel onglet de BottomSheetDialogFragment, je remplace le fragment et l'ajoute à backstack de sorte que lorsque l'utilisateur clique sur l'action onBackPress ou Up, il doit revenir en arrière sur le dernier paramètre de BottomSheetDialogFragment.
Je veux utiliser le composant d'architecture de navigation pour simplifier mes transactions.
Problème: si j'utilise le composant d'architecture de navigation pour naviguer de FragmentA à BottomSheetDialogFragment, je reçois l'erreur ci-dessous.
Java.lang.IllegalStateException: la boîte de dialogue ne doit pas être nulle BottomSheetDialogFragment
Je ne sais pas comment instancier BottomSheetDialogFragment en utilisant le composant d'architecture de navigation et et en utilisant le code ci-dessous, il n'y aura pas de backstack de maintenance en utilisant le composant d'architecture de navigation.
BottomSheetDialogFragment.show(FragmentManager manager, String tag)
Dans la version du composant de navigation 2.1.0-alpha04
, Navigation Graph
peut contenir dialog
comme l'une des destinations.
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/main_navigation"
app:startDestination="@id/startFragment">
<fragment
Android:id="@+id/loginFragment"
Android:name="com.awesomeproject.Android.authentication.login.LoginFragment"
Android:label="Login"
tools:layout="@layout/login_fragment" />
<dialog
Android:id="@+id/bottomSheet"
Android:name="com.awesomproject.Android.BottomSheetFragment"
tools:layout="@layout/bottom_sheet_dialog_fragment" />
</navigation>
Le BottomSheetFragment ressemblera aux autres BottomSheet.
class BottomSheetFragment : BottomSheetDialogFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View =
inflater.inflate(R.layout.bottom_sheet_dialog_fragment, container, false)
}
Ensuite, vous pouvez traiter bottomSheet
de la même manière que les autres destinations. Vous pouvez naviguer vers cette destination ou passer safeArgs
.
À votre santé!