目录
- Navgation是什么?
- 如何使用?
- 页面之间传递数据。
- 动画过渡
一、Navgation是什么?
处理应用内导航所需的一切,利用这个组件,让我们页面之间的切换变得更加容易实现。
1.1 Navigation组件由三部分构成:
NavHost:是一个容器,用来承载所有的Fragment。
NavController:页面切换需要用到的类。
NavGraph:导航内容相关信息的 XML 资源文件,其中包含页面目的地和操作
二、如何使用?
(1)先引入依赖
implementation 'androidx.navigation:navigation-fragment:2.3.0'
implementation 'androidx.navigation:navigation-ui:2.3.0'
(2)创建Fragment:这里我创建了四个空的fragment
(3)创建NavGraph资源文件
在res文件下创建一个资源文件夹
在资源文件里面,添加所有需要导航的fragment
这里我们给每个fragment建立线条,这个也是Navigation带来的可视化图形界面的好处,非常直观,清晰。当然线条不是必要的,你可以通过NavController去跳转。但是建立线条后,可以更加高效的设置动画,以及跳转。
(4)添加一个NavHost容器
将刚才的资源文件引入进来
这里,我们就可以运行看看效果,我们就会发现BuyFragment就会作为第一个界面显示出来。当然,如果你想更换另外一个界面作为第一个显示,可以修改这个属性。
运行:
2.1 那么如何实现页面的切换呢?比如我如何跳转过去呢?
比如我点击中间的imageview进行一个页面的跳转
override fun onClick(view: View?) {
Log.d(TAG, "onClick: ")
if (view != null) {
when (view.id) {
R.id.iv_buy_icon -> {
//获得navController.
val findNavController = findNavController()
//进行路由跳转。
findNavController.navigate(R.id.home_action_home_buyfragment_to_home_homefragment)
Log.d(TAG, "onClick: ")
}
else -> {}
}
}
}
借助NavController就可以实现轻松跳转,这里的home_action_home_buyfragment_to_home_homefragment就是资源文件中我们定义的线条动作。
2.2 如果您想跳转以后把前一个fragment给弹出栈,可以如下这样。
跳转以后,将自己弹出栈。如下这里也会有一个这样的图标显示
三、页面之间传递数据
也是借助navcontroller的navigate传递数据
override fun onClick(view: View?) {
Log.d(TAG, "onClick: ")
if (view != null) {
when (view.id) {
R.id.iv_buy_icon -> {
val findNavController = findNavController()
var bundle = Bundle()
bundle.putString("my_name","zwl")
findNavController.navigate(R.id.home_action_home_buyfragment_to_home_homefragment,bundle)
Log.d(TAG, "onClick: ")
}
else -> {}
}
}
}
在下一个界面,可以如下这样接收。
var str = requireArguments().getString("my_name")
传递数据的方式还有很多中,也可以借助viewmodel,因为viewmodel的生命周期是整一个activity,所以fragment之间也可以共享,传递数据,或者应该说本来这个viewmodel对于fragment之间来说,拿到的都是同一个。
四、动画过渡
【未完待续~】