我有类似的导航结构:
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
的正确方法是什么?
根据文档,将app:popUpTo
设置为要弹出的目标 - 您不想弹出房屋范围,您想弹出起点,因此您应该设置app:popUpTo
到起点的ID。
请注意,根据导航的原则,您应该始终具有固定的起始目的地 - 您不应使用有条件导航的起始目标 - 导航中的许多API,例如NavigationUi,假设您是正确的遵循导航的原则,图形的起始目的地保留在您的后堆上。
请记住,Android会在返回活动时恢复您的状态(包括您所在的片段((例如,用户手动撤销您所需的权限之后( - 您的片段本身(或活动,如果许可,则在整个应用程序中的每个屏幕上,实际上都是全球所需的(应该始终检查是否有许可 - 您不能依靠始终被称为开始。
我尚未使用nav lib,但是通过在文档中读取此部分,也许您只有一个错字,需要用popUpTo
替换popTo
?
从一个目的地导航到另一个目的地时,请添加 app:popupto 属性到关联元素。 APP:Popupto 告诉导航库,将后面堆栈中的某些目的地弹出,作为呼叫navigate((的一部分。属性值是应保留在堆栈上的最新目的地的ID。
您还可以包括应用:Popuptoinclusive ='true 指出 App:Popupto 中指定的目标也应从后堆中删除。。P>