我试图弄清楚如何跳过导航组件后堆栈中的一些片段。我有这样的应用程序结构
- categories_fragment
- category1_collection_fragment
- category1_collection_item_view_fragment
- category1_collection_item_edit_fragment
- category2_collection_fragment
...etc
工作流程应如下所示:
- 用户进入应用程序 - categories_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的导航控制器设置工具栏时,单击向上导航图标,之后导航按我想要的方式工作,但对于后退按钮而言并非如此,即使后退按钮将我带到我想要的片段由于崩溃,我无法从其他任何地方导航