Android开发问题记录(1)--Fragment跳转

文章介绍了在登录成功后如何在Android应用中使用NavHostFragment和Navigation组件实现携带参数的页面跳转,讨论了三种方法的优缺点,以及如何获取并显示传递的用户名参数。
摘要由CSDN通过智能技术生成

功能需求:

在登录成功之后,获取用户名并在上一级页面显示

解决方案:

方法1:

NavHostFragment.findNavController(this).popBackStack()

缺点:不可以携带参数

方法2:

//定义传参数据
val bundle = Bundle()
bundle.putString("uname", uname)
NavHostFragment.findNavController(this).navigate(
	/**key_setting_page是将要跳转的Fragment的id
		我这里使用Navgation
		所以id应该是nav.xml索引id
	*/
   R.id.key_setting_page, 
   bundle
)
//此类型取参方法相信你们都会,使用bundle即可

缺点:跳转之后进入下一个fragment,再点击返回按钮会再次回到此页面,逻辑错误

方法3:

//定义传参数据
val bundle = Bundle()
bundle.putString("uname", uname)
//使用 NavBackStackEntry 的 savedStateHandle 来设置参数
val navBackStackEntry = findNavController().getBackStackEntry(R.id.key_setting_page)
navBackStackEntry.savedStateHandle.set("uname", bundle)
// 调用 navController 的 navigateUp() 方法返回到上一个 Fragment
findNavController().navigateUp()

这个实现了我的需求,使用之前需添加依赖,版本和你们的Navgation版本一致

implementation “androidx.navigation:navigation-fragment-ktx:2.5.3”
implementation “androidx.navigation:navigation-ui-ktx:2.5.3”

补充:方法3获取参数
  1. 添加依赖
//需要替换版本
implementation "androidx.navigation:navigation-fragment-ktx:2.5.3"
implementation "androidx.navigation:navigation-ui-ktx:2.5.3"
  1. 获取参数

我这里做了参数显示和按钮关闭

        //获取传值username
        val navBackStackEntry = findNavController().currentBackStackEntry
        val savedStateHandle = navBackStackEntry?.savedStateHandle
        val bundle = savedStateHandle?.get<Bundle>("uname")
        //如果登录传参赋值按钮用户名
        if (bundle?.getString("uname") != null) {
            // 替换成你要获取的参数的键
            bundle.getString("uname").also { login.text = it }
            //关闭登录按钮
            pLogin.isEnabled = false
        }
  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

猿小路

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

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

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

打赏作者

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

抵扣说明:

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

余额充值