Jetpack组件Navigation导航的一些概念

1.基本概念

navigation: 导航
navHost: 是一个容器或者控制器,里面放fragment
fragment: 碎片化屏幕,一个activity可以有多个fragment,是一种容器,里面可以放navHost
navController: 控制导航的逻辑,驱动导航图
navGraph: 导航图

2.导航代码

基本设置完成之后,跳转代码:(以下代码都是放在监听事件中的)

//获取navController
val navController = Navigation.findNavController(v)
//跳转
navController.navigate(R.id.action_searchFragment_to_galleryFragment)

或者这样写:

//方式一
Navigation.findNavController(v).navigate(R.id.action_searchFragment_to_galleryFragment)
//方式二
Navigation.findNavController(requireActivity(), R.id.fragment).navigate(R.id.action_searchFragment_to_galleryFragment)
//方式三
Navigation.createNavigateOnClickListener(R.id.action_searchFragment_to_galleryFragment)

3.传递参数

//在一个fragment中设置要传递的参数
//TextView监听事件
textViewCancel.setOnClickListener {
    //要传递一个字符串“yourStr”
    val yourStr = "yourStr"
    val bundle = Bundle()
    bundle.putString("YOUR_STR", yourStr)
    //页面跳转
    Navigation.createNavigateOnClickListener(R.id.action_searchFragment_to_galleryFragment, bundle)
}

//在另一个fragment中获取参数(在onCreateView中或者其他)
val str = arguments.get("YOUR_STR") as String //as是类型转换

此外,如果你使用了ViewModel来管理数据,就不需要在多个Fragment之间传递数据了,因为在不同fragment中请求回来的是一个ViewModel,能共享数据(fragment中应在onCreateView中,配置ViewModel和DataBinding),ViewModel的使用可以参考另一篇博文,附带Demo

具体Navigation实操可以去看这个UP主的视频,非常好:https://www.bilibili.com/video/av57646155(建议2倍食用)

发布了77 篇原创文章 · 获赞 40 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/y_dd6011/article/details/104208828