在按下主页按钮、与另一个应用程序共享数据或切换活动后,我正试图返回到特定的片段。
底部的碎片Nav:
A B C D
在应用程序中共享的片段,可以嵌套或从底部导航到Nav片段:
E F G
预期行为
用户导航堆栈:
A->E
按下主页按钮并重新打开应用程序,堆栈保持不变。
A->E
实际行为
用户导航堆栈:
A->E
按下主页按钮并重新打开应用程序,返回到第一个片段
A
在Main ActivityonPause方法期间,我试图通过将捆绑包从navController.saveState()
传递到视图模型来恢复导航状态,并使用navController.restoreState()
on Resume进行恢复,但没有成功。导航组件不具备此功能吗?
您要查找的是Multiple Backstack
。android中的每个Fragment
都有自己的堆栈。因此,如果导航到ParentFragment
中的另一个Fragment
,则ParentFragment
将在其堆栈中添加childFragment
。在您的情况下,您的ParentFragment
是A
,childFragment
是E.
然而,NavigationComponent
并没有对Multiple Backstack
的普通支持。自从NavigationComponent
发布以来,NavigationComponent
库的创建者Ian Lake一直在研究这个问题,但至今仍未交付。这并不意味着他不在研究,这只是意味着(正如Ian自己所说(由于Fragments
API的存在,实现起来更难。
回到你的问题,如果你真的想实现MultipleBackstack
,那么你可以遵循这个项目,几乎任何想要MultipleBackstack
和NavigationComponent
的人都会首先提到这个项目。还有一个谷歌示例展示了如何实现这种行为。