Я пытаюсь перейти от DialogFragment к Fragment в компоненте навигации, но получаю странный результат.

enter image description here

При переходе от DialogFragment к Fragment фрагмент фона меняется на целевой фрагмент с текущим диалоговым окном поверх него, а не просто перемещается к целевому фрагменту.

Вот график навигации.

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

Почему у меня такое поведение или как это исправить?

Под фиксацией я подразумеваю нормальное поведение диалога. Скажем, у меня есть диалоговое окно D поверх фрагмента A , и я перехожу к фрагменту B с кнопки на D , на экране должно отображаться B . И когда я вернусь из B , он должен перейти к предыдущему этапу D поверх A .

7
musooff 31 Май 2019 в 05:35

2 ответа

Лучший ответ

Спасибо @musooff за регистрацию этой ошибки

Эта проблема была исправлена в Navigation 2.1.0-alpha06 вместе с другими несоответствиями в диалоговом окне, такими как кнопка «Назад» при открытии диалогового окна.

Тем не менее, обновите до 2.1.0-beta02 или выше, если можете.

4
jpcv 25 Июл 2019 в 10:41

Вы могли бы использовать

view.getDialog().dismiss(); 

После перехода к B. Но в этом случае диалог не будет виден, когда вы вернетесь к фрагменту A .

Если вы действительно хотите, чтобы он был видимым, возможно, вам следует попробовать использовать Fragment и сделать вид, что это Dialog. Как и в этом примере с ссылкой.

0
Klaudia 2 Июн 2019 в 22:15