Всплывающее поведение компонента навигации Android
Я пытаюсь выяснить, как пропустить некоторые фрагменты в заднем стеке компонента навигации. У меня есть такая структура приложения
- categories_fragment
- category1_collection_fragment
- category1_collection_item_view_fragment
- category1_collection_item_edit_fragment
- category2_collection_fragment
...etc
Рабочий процесс должен выглядеть следующим образом:
- пользователь заходит в приложение - по умолчанию открывается category_fragment
- пользователь открывает category1_collection_fragment
- пользователь открывает category1_collection_item_view_fragment
- пользователь открывает category1_collection_item_edit_fragment
- пользователь редактирует элемент и сохраняет его
- пользователь представлен с category1_collection_item_view_fragment
- пользователь нажимает кнопку "Назад" и переходит к шагу 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 нажимается значок навигации вверх, после чего навигация работает так, как я хочу, но это не относится к кнопке "Назад", хотя кнопка "Назад" переводит меня на фрагмент, который я хочу, я не могу перемещаться оттуда где-либо еще из-за аварии