web-dev-qa-db-fra.com

Comment naviguer de la boîte de dialogue au fragment dans le composant de navigation?

J'essaie de naviguer de DialogFragment à Fragment dans le composant de navigation, mais j'obtiens un résultat étrange.

enter image description here

Lorsque je navigue de DialogFragment vers Fragment, le fragment d'arrière-plan se transforme en fragment cible avec la boîte de dialogue actuelle au-dessus, au lieu de simplement se déplacer vers le fragment cible.

Voici le graphique de navigation.

<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/home"
    app:startDestination="@+id/titleScreen">

    <fragment
        Android:id="@+id/titleScreen"
        Android:name="com.example.Android.navigationadvancedsample.homescreen.Title"
        Android:label="@string/title_home"
        tools:layout="@layout/fragment_title">
        <action
            Android:id="@+id/action_title_to_about"
            app:destination="@id/aboutScreen"/>
    </fragment>
    <dialog
        Android:id="@+id/aboutScreen"
        Android:name="com.example.Android.navigationadvancedsample.homescreen.About"
        Android:label="@string/title_about"
        tools:layout="@layout/fragment_about">
        <action
            Android:id="@+id/action_aboutScreen_to_register"
            app:destination="@id/register" />
    </dialog>
    <fragment
        Android:id="@+id/register"
        Android:name="com.example.Android.navigationadvancedsample.formscreen.Register"
        Android:label="fragment_leaderboard"
        tools:layout="@layout/fragment_leaderboard" />
</navigation>

Pourquoi j'obtiens ce comportement ou comment le corriger?

Par correction, je veux dire un comportement de dialogue normal. Disons, j'ai une boîte de dialogue [~ # ~] d [~ # ~] au-dessus d'un fragment [ ~ # ~] a [~ # ~] et passez à un fragment [~ # ~] b [~ # ~] à partir d'un bouton sur [~ # ~] d [~ # ~] , l'écran devrait afficher [~ # ~] b [~ # ~] . Et quand je reviens de [~ # ~] b [~ # ~] , il devrait revenir à l'étape précédente de [~ # ~] d [~ # ~] au-dessus de [~ # ~] a [~ # ~] .

6
musooff

Vous pourriez utiliser

view.getDialog().dismiss(); 

après avoir navigué vers B. Mais de cette façon, la boîte de dialogue ne sera pas visible lorsque vous revenez à [~ # ~] a [~ # ~] fragment.

Si vous voulez vraiment qu'il soit visible, vous devriez peut-être essayer d'utiliser Fragment et prétendre qu'il s'agit de Dialog. Comme dans cet exemple avec l'activité lien .

0
Klaudia