首先看一下Navigation Graph中Action中都有哪些参数
Action参数
-
launchSingleTop :
效果类似于Activity的SingleTop,栈顶复用模式。
-
popUpTo :
跳转到指定的Fragment,并弹出指定Fragment之上的fragment
-
popUpToInclusice :
如果 =true 会弹出当前Fragment,false则不会弹出
** 应用场景: Fragment A -> B -> C**
1 正常导航, B 导航到 C , C 返回时到 B, 在fragmentB中调用该action
<action
android:id="@+id/action_FragmentB_to_FragmentC"
app:destination="@id/FragmentC"
/>
请注意:该操作需要确保NavHostFragment中设置了 app:defaultNavHost="true" 属性
因为该属性会确保用户按下手机的Back键时,该Fragment会自动处理系统返回键,能自动将当前展示的Fragment退出。与上面的场景相同。
2.1 B导航C,C返回时回到A
方法1:在B中调用该Action时,虽然会导航到C,但此时Fragment栈中B已经被弹出了,所以C返回时会直接回到A
需要注意的是:在跳转页面时必须要使用到这个定义的Action才会有该效果。否则依然是按照顺序返回,也就是在C页面按下back键将返回B。
上图中,我用了Navigation类的 createNavigateOnClickListener() 便捷方法,并没有使用Action,这是不对的。
2.2 B到C正常导航,但在C中返回时通过直接导航到A同时设置popUpto为A,popUpToInclusive为false
** 在CFragment中需要拦截back事件**