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
相关产品推荐
相关产品推荐

