Как просмотреть стек фрагментов в NavController, не теряя родительское состояние - PullRequest
0 голосов
/ 11 марта 2020

Я открываю некоторый основной фрагмент FragA, который затем может открыть другие фрагменты, которые добавляются в стек, но когда я нажимаю назад, я показываю DialogC, который должен очистить стек и вернуть меня к FragA, не теряя его состояния, восстановите его из стека, а не создавайте его - чтобы воссоздать его, мне нужно будет передать некоторые аргументы через весь стек. Я пробовал некоторые конфиги с popUpTo в разных местах, а также использовал findNacController.popUpTo(with/out_aruments) или findNavController.navigate(R.id.action_dialog_c_to_frag_a) без destination, определенного в действии, но pop не может найти действие в стеке, навигация хочет восстановить фрагмент, когда определено назначение, без вас он не может найти поп-действие в стеке (I/NavController: Ignoring popBackStack to destination frag_a as it was not found on the current back stack)

Это образец моего nav_graph:

<?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">
        <fragment
            android:id="@+id/asdf"
            android:name="SomeNaviFragment">
                <action
                    android:id="@+id/action_asdf_to_frag_a"
                    app:destination="@id/frag_A" />
        </fragment>
        <fragment
            android:id="@+id/frag_A"
            android:name="FragA">
        <argument
            android:name="some_id"
            app:argType="integer" />
        <action
            android:id="@+id/action_frag_a_to_frag_b"
            app:destination="@id/frag_B" />
        </fragment>
        <fragment
            android:id="@+id/frag_B"
            android:name="FragB">
        <action
            android:id="@+id/action_frag_b_to_dialog_frag_c"
            app:destination="@id/DialogFragC"/>
        </fragment>
        <dialog
            android:id="@+id/DialogFragC"
            android:name="DialogC">
                <action
                    android:id="@+id/action_dialog_c_to_frag_a"
                    app:popUpTo="@id/frag_a"
                    app:popUpToInclusive="true"/>
        </dialog>
</navigation>

Короче - я не хочу на go глубже FragA через некоторые фрагменты, но когда в какой-то момент появляется DialogC, я хочу вернуться к FragA, в его начальное состояние. Можно ли достичь этого, не передав аргументы создания для FragA? Некоторое решение уже опробовано, например: Навигация в обратном направлении с компонентом навигации с его связанными ресурсами, но это никак не помогло.

1 Ответ

1 голос
/ 15 марта 2020

Я использовал статью в вашем посте, чтобы сделать это https://github.com/yoobi/backNavigation Я надеюсь, что это поможет.

РЕДАКТИРОВАТЬ: вы ищете сочетание этого и статьи тогда .

  • Атрибут popUpTo действия «выскакивает» задний стек в заданный пункт назначения перед навигацией. (Пункты назначения удалены из заднего стека.)

  • Если атрибут popUpToInclusive имеет значение false или не задан, popUpTo удаляет пункты назначения до указанного пункта назначения, но оставляет указанный пункт назначения в заднем стеке.

  • Если для popUpToInclusive установлено значение true, атрибут popUpTo удаляет все пункты назначения, включая и заданный пункт назначения, из заднего стека.

  • Если popUpToInclusive имеет значение true и popUpTo установлено в начальное местоположение приложения, действие удаляет все пункты назначения приложения из заднего стека. Кнопка «Назад» позволяет пользователю полностью выйти из приложения.

Вы также можете проверить счет вашего обратного стека с помощью: parentFragmentManager.backStackEntryCount

...