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

为什么Android Navigation组件中使用全局Action传递参数失败?

问题原因及解决方案

核心问题1:参数命名不匹配

你在导航图中声明的参数名为全小写eventid,但代码中传参时使用的是驼峰命名eventID,大小写不一致导致Safe Args生成的函数无法识别对应参数。

核心问题2:全局Action未声明对应参数

你当前把参数配置写在了目的地fragment内部,全局Action默认不会自动继承目标目的地的参数配置,需要显式在Action内部声明参数。

具体修复步骤

  1. 调整导航图配置,把参数移到全局Action内部,同时统一参数命名和代码保持一致:
<fragment
    android:id="@+id/eventHolder"
    android:name="de.n.newtest.ui.Fragments.Details.EventHolderKT"
    android:label="fragment_event_holder">
    <action
        android:id="@+id/action_global_eventHolder"
        app:destination="@id/eventHolder"
        app:enterAnim="@anim/holderslideinright"
        app:exitAnim="@anim/holderslideoutleft"
        app:popEnterAnim="@anim/holderslideinleft"
        app:popExitAnim="@anim/holderslideoutright">
        <argument
            android:name="eventID"
            android:defaultValue="-1"
            app:argType="integer" />
    </action>
</fragment>
  1. 重新构建项目,触发Safe Args重新生成导航相关类,原有调用代码即可正常运行:
epoxyController = EventListEpoxyController { eventClickedID ->
        val navDirections = NavGraphDirections.actionGlobalEventHolder(eventID = eventClickedID)
        findNavController().navigate(navDirections)
}

可选检查项

如果修改后仍有报错,检查项目是否正确启用了Safe Args插件:

  • 项目根目录build.gradle中已引入Safe Args依赖
  • 模块级build.gradle中已应用androidx.navigation.safeargs.kotlin插件(Kotlin项目适配)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:21:00