JetPack-(2.1)-Navigation-Action相关(popUpTo,popUpToInclusice,launchSingleTop)

113 阅读1分钟

首先看一下Navigation Graph中Action中都有哪些参数

Action参数

  • launchSingleTop :

    效果类似于ActivitySingleTop,栈顶复用模式。

  • 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" 属性

1710166809492(1).jpg

因为该属性会确保用户按下手机的Back键时,该Fragment会自动处理系统返回键,能自动将当前展示的Fragment退出。与上面的场景相同。

2.1 B导航C,C返回时回到A

方法1:在B中调用该Action时,虽然会导航到C,但此时Fragment栈中B已经被弹出了,所以C返回时会直接回到A

1710168068942.jpg

需要注意的是:在跳转页面时必须要使用到这个定义的Action才会有该效果。否则依然是按照顺序返回,也就是在C页面按下back键将返回B。

1710168214679.jpg

上图中,我用了Navigation类的 createNavigateOnClickListener() 便捷方法,并没有使用Action,这是不对的。

2.2 B到C正常导航,但在C中返回时通过直接导航到A同时设置popUpto为A,popUpToInclusive为false

1710169456834.jpg

** 在CFragment中需要拦截back事件**

1710169521461.jpg