【Android进阶必学】JetPack指路明灯,flutter插件第三方库

本文详细介绍了Android JetPack中的导航组件Navigation,特别是navigateUp和popBackStack的使用。navigateUp类似于物理返回键,popBackStack则能跨级返回。此外,还讨论了defaultNavHost、popupTo属性以及动态加载和路由动画的应用,强调了Navigation在单Activity架构和声明式编程中的重要角色。
摘要由CSDN通过智能技术生成

路由的返回控制,有两种方式,navigateUp和popBackStack。下面通过一个例子来演示下,如何对路由进行返回控制,下面有三个Fragment,A-B-C。

navigateUp

navigateUp与物理返回键的功能类似,即返回当前页面堆栈的栈顶页面,代码如下所示。

Navigation.findNavController(it).navigateUp()

当我们从A路由到B,B路由到C后,通过上面的代码,使用navigateUp返回,则路由返回路径为C到B,B到A,如果在A继续调用navigateUp,则不会响应,因为当前栈中只有唯一一个页面,而且是startDestination,所以不会再响应返回操作。

popBackStack

navigateUp只能响应向上一级的路由控制,而不能跨级进行路由返回,popBackStack则是对其的补充,可以指定路由返回的action,代码如下所示。

Navigation.findNavController(it).popBackStack(R.id.loginFragment, true)

当我们从A路由到B,B路由到C后,通过popBackStack返回,指定要返回到的Fragment的id,即可直接返回到指定位置,第二个参数inclusive,代表返回操作是否包含指定的Fragment id。

这里要注意的是,当你指定返回到A,同时inclusive为true的时候,A也是不会被移除的,因为A是栈顶。

实际上,navigateUp内部就是通过popBackStack实现的。

借助popBackStack的返回值,可以在跳转失败时,创建新的Fragment。

val flag = Navigation.findNavController(getView()).popBackStack(R.id.someFragment, false)

if (!flag){

Navigation.findNavController(getView()).navigate(R.id.someFragment)

}

defaultNavHost

app:defaultNavHost="true"这个属性是我们最早在FragmentContainerView中设置的,通过这个属性,可以让当前的NavH

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值