You need to enable JavaScript to run this app. Android Studio中Kotlin开发:点击按钮Bundle传参并跳转Fragment实现
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Kotlin开发:点击按钮Bundle传参并跳转Fragment实现

Android Kotlin中Fragment间通过Bundle传参并跳转的实现方案

一、传统Fragment事务实现(无Navigation组件的存量项目通用)

核心实现逻辑都在当前Fragment的按钮点击回调中完成,代码替换对应控件id、参数key和目标Fragment类名即可直接运行:

  • 实例化目标Fragment对象
  • 构造Bundle实例,填充需要传递的键值对参数
  • 将Bundle赋值给目标Fragment的arguments属性
  • 通过FragmentManager开启事务,完成页面替换跳转
// 当前Fragment内的按钮点击监听
btn_jump.setOnClickListener {
    // 初始化目标Fragment
    val targetFragment = TargetFragment()
    // 填充传递参数
    val transferBundle = Bundle().apply {
        putString("key_nickname", "sample_nickname")
        putInt("key_user_id", 10086)
        putBoolean("key_is_login", true)
    }
    // 绑定参数到目标Fragment
    targetFragment.arguments = transferBundle
    // 执行跳转事务
    parentFragmentManager.beginTransaction()
        // 替换容器中现有Fragment,R.id.fragment_container为你布局中承载Fragment的控件id
        .replace(R.id.fragment_container, targetFragment)
        // 若需要按返回键回到当前Fragment,保留这行;不需要可删除
        .addToBackStack(null)
        .commit()
}

目标Fragment中接收参数的代码:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    // 用空安全调用读取参数,避免崩溃
    val nickname = arguments?.getString("key_nickname")
    val userId = arguments?.getInt("key_user_id")
    val isLogin = arguments?.getBoolean("key_is_login")
}

二、Navigation组件实现(新项目推荐写法)

如果项目已经接入Jetpack Navigation组件,跳转时可以直接把Bundle作为参数传入navigate方法:

  • 提前在导航graph中配置好当前Fragment到目标Fragment的跳转Action
  • 按钮点击时构造Bundle实例,直接作为navigate方法的入参传入
btn_jump.setOnClickListener {
    val transferBundle = Bundle().apply {
        putString("key_nickname", "sample_nickname")
        putInt("key_user_id", 10086)
    }
    // 触发对应Action的跳转
    findNavController().navigate(R.id.action_currentFragment_to_targetFragment, transferBundle)
}

目标Fragment的参数读取逻辑和传统事务写法完全一致。

注意事项

  • 不要通过目标Fragment的自定义带参构造方法传递数据,屏幕旋转等配置变更触发Fragment重建时,构造方法传入的参数会被系统清除,arguments是官方兼容配置变更的标准传参入口
  • 传递自定义对象时,必须让对象实现Parcelable接口,才能被Bundle正常承载
  • 读取参数时必须做空安全判断,避免Fragment重建后arguments为空导致的空指针异常

内容的提问来源于stack exchange,提问作者user15392124

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 02:15:08