使用Jetpack组件Navigation(三)Fragment跳转Fragment/Activity并传递参数

本文地址:https://blog.csdn.net/qq_40785165/article/details/113575664,转载需附上此地址

大家好,我是小黑,一个还没秃头的程序员~~~

滴水穿石,不是力量大,而是功夫深。

今天打算分享的内容是Navgation组件中,Fragment跳转到Fragment/Activity中并传递参数的实现,本次内容很简单,所以就不做过多的篇幅介绍了,源码地址:https://gitee.com/fjjxxy/navigation-demo.git,效果如下图所示:

如图中效果所示,第一个Fragment跳转至第二个Fragment并传递参数,第二个Fragment则跳转Activity并传递参数,话不多说,开始介绍代码

导航架构与使用Jetpack组件Navigation(一),Fragment与Fragment/Activity页面跳转中的内容一样,这里就不再赘述了,不懂的朋友可以到文章下看,这里唯一变动的就是多传递了参数,所以我们只讲传递参数的代码

以往我们往Fragment中传递参数可以在newInstance方法中通过Bundle存储参数,并通过getArguments获取参数,在Navgation的组件使用中,也可以使用Bundle进行传递参数,使用navigate(@IdRes int resId, @Nullable Bundle args)的重载函数,代码如下所示

  rootView.tv_to_fragment_with_arg.setOnClickListener {
            if (TextUtils.isEmpty(et_arg.text.toString())) {
                Toast.makeText(rootView.context, "参数不能为空", Toast.LENGTH_SHORT).show()
                return@setOnClickListener
            }
            var bundle = Bundle()
            bundle.putString("arg1", et_arg.text.toString())
            findNavController().navigate(R.id.to_fragment_2, bundle)
        }

Arg2Fragment.kt中接收参数是用getArguments并根据key进行获取,代码如下:

 var arg1 = arguments?.getString("arg1")
 rootView.tv_arg.append(arg1)

Fragment跳转到Activity进行传递参数也可以使用Bundle,但是Activity中没有getArguments方法,这就要看一下navigate()方法中对Bundle的处理了,如下图所示

在NavController中,会将Bundle放进最终的参数finalArgs中,然后在ActivityNavigator的navigate函数中通过Intent传递参数,并通过startActivity进行跳转,所以我们在Activity中可以通过getIntent进行获取参数,代码如下:

var arg2 = intent.getStringExtra("arg2")
tv_arg.append(arg2)

这样一来,Navigation中关于Fragment向Fragment以及Activity传递参数的内容就介绍完了,还是和以前的知识点很相似的,大家有空可以自己试一下,最后,也希望喜欢我文章的朋友们可以帮忙点赞、收藏、评论,也可以关注一下,如果有问题可以在评论区提出,也欢迎大家订阅我的个人微信公众号,谢谢大家的支持!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值