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倍食用)