Всплывающее поведение компонента навигации Android

Я пытаюсь выяснить, как пропустить некоторые фрагменты в заднем стеке компонента навигации. У меня есть такая структура приложения

- categories_fragment

    - category1_collection_fragment

        - category1_collection_item_view_fragment

        - category1_collection_item_edit_fragment

    - category2_collection_fragment

    ...etc

Рабочий процесс должен выглядеть следующим образом:

  1. пользователь заходит в приложение - по умолчанию открывается category_fragment
  2. пользователь открывает category1_collection_fragment
  3. пользователь открывает category1_collection_item_view_fragment
  4. пользователь открывает category1_collection_item_edit_fragment
  5. пользователь редактирует элемент и сохраняет его
  6. пользователь представлен с category1_collection_item_view_fragment
  7. пользователь нажимает кнопку "Назад" и переходит к шагу 2 и может повторить 3–6 действий

Вот как выглядит навигационный график:

<fragment
    android:id="@+id/categories_fragment"
    android:name="com.domain.CategoriesFragment">
    <action
        android:id="@+id/action_category1_collection_fragment"
        app:destination="@id/category1_collection_fragment" />
</fragment>

<fragment
    android:id="@+id/category1_collection_fragment"
    android:name="com.domain.category1.Category1CollectioNFragment">
    <action
        android:id="@+id/action_category_1_view_fragment"
        app:destination="@id/category1_view_fragment"/>
</fragment>

<fragment
    android:id="@+id/category1_view_fragment"
    android:name="com.domain.category1.Category1ViewFragment">
    <action
        android:id="@+id/action_view_fragment_to_edit_fragment"
        app:destination="@id/category1_edit_fragment" />
    <argument android:name="item" />
</fragment>

<fragment
    android:id="@+id/category1_edit_fragment"
    android:name="com.domain.category1.Category1EditFragment">
    <action
        android:id="@+id/action_edit_fragment_to_view_fragment"
        app:destination="@id/category1_view_fragment"
        app:popUpTo="@+id/profile_collection_fragment"/>
    <argument android:name="item" />
</fragment>

То, что я реализовал, вроде работает, и пользователь попадает в category1_collection_fragment после редактирования и нажатия кнопки "назад", однако, я получаю сбой при попытке открыть другой / или тот же элемент в коллекции. Ошибка - назначение навигации неизвестно этому NavController.

Я проверил, какие назначения контроллера навигации были изменены в течение этого цикла, используя addOnNavigatedListener:

1. categories_fragment
this one is obvious it's open by default

2. category1_collection_fragment
when user click on the action that takes him to the collection

3. category1_collection_view_fragment
when the user selects an item from the collection and opens it

4. category1_collection_edit_fragment
when the user clicks to edit item

now this next part it vier 3 steps happen at the same time when
navigation controller executes : @id/action_edit_fragment_to_view_fragment 
5. category1_collection_view_fragment
6. category1_collection_fragment
7. category1_collection_view_fragment

so the last destination that has been placed it category1_collection_view_fragment and even though I see category1_collection_fragment open which is what I want the destination is

category1_collection_view_fragment, из которого я не могу открыть другие элементы, и когда я это делаю, я получаю сбой.

Что с этим не так? Как сделать так, чтобы элемент сохранил фрагмент открытого вида без истории открытия фрагмента редактирования?

Я думал о том, чтобы просто использовать findNavController(). PopBackStack() вместо открытия фрагмента представления после сохранения, но мне нужно передать обновленные данные элемента во фрагмент представления и с помощью этого я не могу этого сделать.

РЕДАКТИРОВАТЬ

Пытаясь выяснить, что происходит, я заметил, что при настройке панели инструментов с навигационным контроллером с помощью setUpWithNavController нажимается значок навигации вверх, после чего навигация работает так, как я хочу, но это не относится к кнопке "Назад", хотя кнопка "Назад" переводит меня на фрагмент, который я хочу, я не могу перемещаться оттуда где-либо еще из-за аварии

0 ответов

Другие вопросы по тегам