离开应用程序或启动意图后,MVVM 单个 Activity 应用程序 return 到带有导航组件的嵌套片段

MVVM Single Activity app return to a nested fragment with Navigation component after leaving app or launching intent

我正在尝试在按下主页按钮、与其他应用共享数据或切换活动后 return 到特定片段。

bottomNav 中的片段:

A B C D

在应用程序周围共享的片段,可以嵌套或从底部导航片段导航到:

E F G

预期行为

用户导航堆栈:

A -> E

按下主页按钮并重新打开应用程序,堆栈保持不变。

A -> E

实际行为

用户导航堆栈:

A -> E

按下主页按钮并重新打开应用程序,回到第一个片段

一个

我试图通过在 Main Activity onPause 方法期间将包从 navController.saveState() 传递到视图模型来恢复导航状态,并使用 navController.restoreState() onResume 无济于事。导航组件不支持吗?

您要找的是Multiple Backstack。 android 中的每个 Fragment 都维护自己的堆栈。因此,如果您导航到 ParentFragment 中的另一个 Fragment,您的 ParentFragment 将在其堆栈中添加 childFragment。 在你的例子中,你的 ParentFragmentAchildFragment 是 E.

但是,NavigationComponent 没有对 Multiple Backstack 的原始支持。自 NavigationComponent 发布以来,NavigationComponent 库的创建者 Ian Lake 一直在研究这个问题,但仍未解决。这并不意味着他没有在努力,它只是意味着(正如 Ian 自己所说)由于 Fragments API.

而更难实现

回到你的问题,如果你真的想实现 MultipleBackstack 那么你可以按照这个 project which pretty much anyone who wants MultipleBackstack with NavigationComponent first refers to. There is also a google sample 来展示如何实现这个行为。