You need to enable JavaScript to run this app. Kotlin Fragment导航传参:Jetpack Navigation如何同时传递多个Bundle数据?
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin Fragment导航传参:Jetpack Navigation如何同时传递多个Bundle数据?

你之前的写法无法正常运行的核心原因是:Android Navigation组件提供的navigate()方法,不存在「同时接收两个独立Bundle入参」的重载签名,直接拆分传入两个Bundle的写法既不满足方法调用规则,也会触发编译或运行时异常。

Navigation的导航方法仅支持传入单个Bundle对象作为参数容器,完全不需要为了多传数据拆分出多份Bundle单独传入,可根据实际场景选择以下任意一种实现方案:

方案1:直接在单Bundle中写入所有键值对

Kotlin内置的bundleOf()方法本身就支持接收多组键值对参数,不需要拆分多份Bundle,直接把所有要传递的数据写在同一个Bundle里即可:

R.id.maptoLaundry -> {
    val passBundle = bundleOf(
        "laundryAddressArgument" to laundry_address_text2.text.toString(),
        "orderIDArgument" to orderIDArgument
    )
    navController!!.navigate(
        R.id.action_laundryAddressFragment_to_mapToLaundryFragment,
        passBundle
    )
}

方案2:已有两份独立Bundle时直接合并

如果你的业务逻辑中,两个Bundle是从不同代码分支、不同模块生成的,不方便直接合并键值对,可通过Bundle自带的putAll()方法把两个Bundle的内容拼成一个,再传入导航方法:

R.id.maptoLaundry -> {
    val bundle = bundleOf("laundryAddressArgument" to laundry_address_text2.text.toString())
    val bundle2 = bundleOf("orderIDArgument" to orderIDArgument)
    // 将第二个Bundle的所有数据合并到第一个Bundle中
    bundle.putAll(bundle2)
    navController!!.navigate(
        R.id.action_laundryAddressFragment_to_mapToLaundryFragment,
        bundle
    )
}

最佳实践:如果项目集成了Navigation的Safe Args插件,推荐直接使用插件自动生成的方向类传参,完全避免手动硬编码键名导致的拼写错误、类型不匹配问题。示例写法:

val action = LaundryAddressFragmentDirections
    .actionLaundryAddressFragmentToMapToLaundryFragment(
        laundryAddress = laundry_address_text2.text.toString(),
        orderId = orderIDArgument
    )
navController.navigate(action)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 09:15:04