我有一个像这样的导航结构:
StaringFragment -> nestedNavGraph
|
HomeFragment -> SecondFragment
我需要让这个用户导航离开后StartingFragment
的nestedNavGraph
用户可以不再打后退按钮返回StartingFragment
。
我基本上是在执行权限检查,如果检查成功,我会使用以下代码从 导航StartingFragment
到nestedNavGraph
:
findNavController(R.id.nav_host_frag).navigate(R.id.nestedNavGraph)
然后,在StartingFrag -> nestedNavGraph
导航图编辑器中的之间的操作箭头上,我设置popUpTo
为HomeFragment
和包含为true
。我误解了文档吗?
StartingFragment
一旦我离开它,从 backstack 中删除它的正确方法是什么?
根据文档,您设置app:popUpTo
为要弹出的目的地 - 您不想弹出 HomeFragment,而是希望弹出起始片段,因此您应该将您app:popUpTo
的设置为起始片段的 ID。
请注意,根据Navigation的原则,您应该始终有一个固定的起始目的地 - 您不应该使用开始目的地进行条件导航- Navigation 中的许多 API,例如 NavigationUI,都假设您正确地遵循了原则导航,并且您的图表的起始目的地保留在您的后堆栈中。
请记住,Android 将在返回您的 Activity(例如,在用户手动撤销您请求的权限之后)恢复您的状态(包括您所在的 Fragment) - 您的 Fragment 本身(或者如果该权限确实是全局的,则为 Activity在整个应用程序的每个屏幕上都需要)应该始终检查权限 - 你不能依赖你的开始片段总是被调用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句