使用Android Navigation Architecture组件重新创建返回栈

11

我正在尝试使用 PendingIntent 从通知中实现导航到我的应用程序的特定详细页面,但是我无法重新创建由详情页面一直返回到起始目标的后退堆栈。

我制作了一个示例应用程序在这里,其中包含一个活动和三个片段,以演示此操作:

Fragment 1   ->   Fragment 2  ->  Fragment 3
(start dest) <-               <-

从片段1(起始目的地)直接导航到片段3,使用

    Navigation.findNavController(this, R.id.nav_host_fragment).navigate(R.id.fragment2,
            null,
            NavOptions.Builder()
                    .build())

从片段3调用Navigation.findNavController(this,R.id.nav_host_fragment).navigateUp()时,我被导航回到片段1。有没有办法将其导航到新创建的碎片2?


1
当从片段3调用navigatesUp()以前往片段1时,这是预期的行为,因为该片段在栈中,而片段2尚未创建。 因此,如果您想改变这种行为,您需要手动操作,因为navigateUp()会直接到达上一个片段。 - Mycoola
1个回答

4

感谢M.G指出正确的方向,我已经通过手动使用导航库创建返回堆栈来解决了此问题。这意味着需要多次调用findNavController(...).navigate(...)以创建返回堆栈。

例如,当我深度链接到片段3但希望在返回时能够回到片段1和2时,我会调用:

findNavController.navigate(R.id.fragment1, ...)
findNavController.navigate(R.id.fragment2, ...)
findNavController.navigate(R.id.fragment3, ...)

如果您使用深度链接导航到 fragment3,您介意解释一下在哪里调用它吗? - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接