我试图弄清楚如何跳过导航组件的后堆栈中的某些片段。我有这样的应用程序结构
- categories_fragment
- category1_collection_fragment
- category1_collection_item_view_fragment
- category1_collection_item_edit_fragment
- category2_collection_fragment
...etc
工作流程应如下所示:
这是导航图的样子:
<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的导航控制器来设置工具栏时,单击了导航上的图标,此后导航便按照我想要的方式工作了,但即使是使用后退按钮,情况也是如此尽管后退按钮将我带到了碎片,但我希望由于崩溃我无法从那里导航到其他地方