IllegalStateException при использовании вложенных DialogFragments с библиотекой навигации - PullRequest
0 голосов
/ 24 февраля 2020

Я использую библиотеку навигации (2.2.0-rc04), и у меня есть два DialogFragments. Первый - это A, открытый с MainFragment. Второй - B, и это просто диалоговое окно для подтверждения, открытое A. Вот общая структура связанной навигации XML:

<navigation app:startDestination="@id/mainFragment" ...>

    <fragment android:id="@+id/mainFragment" ...>
        <action
            android:id="@+id/action_mainFragment_to_ADialog"
            app:destination="@id/ADialog" />
    </fragment>

    <dialog
        android:id="@+id/ADialog"
        android:name="com...ADialog"
        android:label="ADialog"
        tools:layout="@layout/dialog_a">
        <action
            android:id="@+id/action_aDialog_to_bDialog"
            app:destination="@id/BDialog" />
    </dialog>

    <dialog
        android:id="@+id/BDialog"
        android:name="com...BDialog"
        android:label="BDialog" />

    <action
        android:id="@+id/action_global_login"
        app:destination="@id/nav_graph_login"
        app:popUpTo="@id/mainFragment"
        app:popUpToInclusive="true"/>

</navigation>

Я хочу, чтобы в экран за один раз. Поэтому, когда пользователь нажимает кнопку от A до go от B, я вызываю dismiss() на A прямо перед тем, как я вызываю navigate(action_aDialog_to_bDialog), чтобы вызвать B. B появляется, но когда я пытаюсь вызвать navigate(action_global_login) из B, Я получаю следующую ошибку:

IllegalStateException: Fragment B not associated with a fragment manager.

Есть идеи, что это за проблема и как ее решить?

1 Ответ

0 голосов
/ 25 февраля 2020

Вместо программного вызова dismiss(), я обновил график следующим образом:

<dialog
    android:id="@+id/ADialog"
    android:name="com...ADialog"
    android:label="ADialog"
    tools:layout="@layout/dialog_a">
    <action
        android:id="@+id/action_aDialog_to_bDialog"
        app:destination="@id/ADialog"
        app:popUpTo="@id/ADialog"
        app:destination="@id/BDialog" />
</dialog>
...