web-dev-qa-db-fra.com

Comment créer BottomSheetDialogFragment à l'aide du composant d'architecture de navigation?

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)
16
Anmol

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é!

19
Boonya Kitpitak