Android Jetpack(一):Navigation

目录

  1. Navgation是什么?
  2. 如何使用?
  3. 页面之间传递数据。
  4. 动画过渡

一、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之间来说,拿到的都是同一个。
在这里插入图片描述

四、动画过渡

【未完待续~】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前期后期

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值