You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在基于字符串的Route导航时传递Bundle参数?

为基于字符串的Route导航传递Bundle参数的方法

当使用字符串类型Route而非ID导航时,由于没有直接接收route: String和Bundle的navigate重载方法,可通过以下几种方案传递参数:

方案1:参数拼接进Route字符串(基础用法)

Navigation组件支持在Route中定义参数占位符,直接将参数值拼接进Route即可传递:

  1. 先定义带参数占位符的Route:
object navRoutes {
    const val home = "home"
    // 用{参数名}定义必填参数占位符
    const val confirmation = "confirmation/{amount}"
    // 用?标记可选参数
    const val profile = "profile?userId={userId}"
}
  1. 导航时拼接参数值:
val amount = 100
// 必填参数直接拼接
view.findNavController().navigate("confirmation/$amount")

val userId: String? = "123"
// 可选参数可拼接或省略
view.findNavController().navigate(if (userId != null) "profile?userId=$userId" else "profile")
  1. 目标页面接收参数:
val amount = arguments?.getString("amount")?.toInt()
val userId = arguments?.getString("userId")

方案2:通过NavOptions传递Bundle(不推荐)

可借助NavOptions.Builder的setArguments方法传入Bundle,但这种方式可能和Navigation的参数解析逻辑冲突,仅作为临时替代方案:

val bundle = bundleOf("amount" to 100)
val navOptions = NavOptions.Builder()
    .setArguments(bundle)
    .build()
view.findNavController().navigate(navRoutes.home, navOptions)

方案3:使用Safe Args插件(推荐,类型安全)

Safe Args是Navigation官方提供的类型安全参数传递插件,完美适配字符串Route场景,还能避免手动拼接的错误:

  1. 项目根目录build.gradle添加插件依赖:
plugins {
    id "androidx.navigation.safeargs.kotlin" version "2.7.7"
}
  1. 在导航图中配置目标页面的参数,插件会自动生成对应的方向类。

  2. 导航时调用生成的方法传递参数:

// 生成的方向类会自动处理Route和参数
val action = ConfirmationDirections.actionToConfirmation(amount = 100)
view.findNavController().navigate(action.route)
  1. 目标页面通过生成的参数类接收:
val args = ConfirmationArgs.fromBundle(requireArguments())
val amount = args.amount

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 09:54:23