腾讯等大厂面试最喜欢问的Android-Jetpack架构组件-—-Navigation详解-[转]

navigation根节点中有个startDestination字段,他表示的是默认展示的是哪一个页面。通过fragment标签来定义要路由的相关页面。id为fragment唯一标识。name为包名,必须保证正确。layout为fragment的布局文件,配置后方便在Design视图中查看。

fragment中配置了子节点 action 。action表示的就是具体要路由的行为。同样id也是其唯一标识,destination表示的是目的地,即需要路由到具体的某一个页面。popUpTo表示弹出到某一个页面。action还有其他的属性比如配置动画等,具体请看Demo。

** NavHostFragment是导航视图的展示容器。**

name为固定写法,必须指明为

androidx.navigation.fragment.NavHostFragment

defaultNavHost字段表示是否拦截返回按键操作。

若为true,需要的Activity中重写onSupportNavigateUp方法。

因为默认情况下返回键是不会回退fragment页面的。

override fun onSupportNavigateUp(): Boolean {
return findNavController(R.id.nav_host_fragment).navigateUp()
}
navGraph字段即为我们配置的navigation导航视图。

NavController

通过findNavController来获取NavController,通过controller的navigate或者navigateUp进行页面之间的路由操作。

那么在三个页面的点击按钮的逻辑就是挑战相应的页面:

mBtn.setOnClickListener {
Navigation.findNavController(it).navigate(R.id.fragment1_action)

}

通过指定action的id来告诉Navigation跳转的逻辑。其他页面也是一样。

最终效果:

我们来总结下 navigation、NavHostFragment以及NavController之间的关系。

navigation就是规划了很多的路线,而这些路线需要在NavHostFragment中才能进行展示。展示后这么多的路线该怎么走呢,决定权就在NavController手中了,就像是方向盘一样,控制着该走哪一个路线。

传递参数

在上文中我们讲解了navigation相关的知识,其中还有一个子标签:argument。是用来定义参数的。比如我们在fragment2标签中添加argument标签如下:

那么在fragment1跳转到fragment2的时候就可以携带参数了。其中 name 表示参数名称。defaultValue即为默认值。argType为参数的类型。nullable表示是否可以为空。

fragment之间传递参数有两种方式:

  • 传统的Bundle方式
  • 通过谷歌提供的safeArgs

传统的Bundle方式

通过Bundle来设置和获取参数。

在fragment1中进行设置:

mBtn.setOnClickListener {
//如果要使用 xml中argument的默认值则直接new Bundle() 传入即可
val args = Bundle()
args.putString(“name”,“通过bundle传递参数”)

Navigation.findNavController(it).navigate(R.id.fragment1_action, args)

}

在fragment2中进行获取参数:

val args = arguments
val name = args?.getString(“name”)

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

最后

Android学习是一条漫长的道路,我们要学习的东西不仅仅只有表面的 技术,还要深入底层,弄明白下面的 原理,只有这样,我们才能够提高自己的竞争力,在当今这个竞争激烈的世界里立足。

人生不可能一帆风顺,有高峰自然有低谷,要相信,那些打不倒我们的,终将使我们更强大,要做自己的摆渡人。

资源持续更新中,欢迎大家一起学习和探讨。

西不仅仅只有表面的 技术,还要深入底层,弄明白下面的 原理,只有这样,我们才能够提高自己的竞争力,在当今这个竞争激烈的世界里立足。

人生不可能一帆风顺,有高峰自然有低谷,要相信,那些打不倒我们的,终将使我们更强大,要做自己的摆渡人。

资源持续更新中,欢迎大家一起学习和探讨。

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值