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

Jetpack Compose导航无法传递正确Integer ID问题求助

排查Jetpack Compose导航传参ID异常的可能原因

1. 导航路由与参数解析不匹配

  • 检查NavGraph里ShowMailScreen的路由是否正确声明参数占位符,比如"show_mail/{mailId}",且参数类型与目标页面解析的类型一致(比如都是Int)。
  • 确认目标页面解析参数时的键名和传递时完全对应,比如navArgs<ShowMailScreenArgs>().mailId,要保证Args类的参数名和路由占位符/传递键一致。

2. 参数传递时的类型或值异常

  • 检查点击事件中传递的mail.id是否确实为日志显示的2,避免打印的日志变量和实际传递的变量不是同一个。比如日志打了mail.id,但传递时误传了其他变量(比如默认的0)。
  • 如果mail的id是可空类型,确认传递前没有错误的非空处理,比如mail.id ?: 0,如果mail.id实际不为空但逻辑判断错误,会导致传递默认值0。

3. 导航组件版本或配置差异

  • 对比测试Demo和主项目的Jetpack Navigation版本,部分旧版本存在参数解析的bug,比如Int类型参数默认值异常。
  • 检查主项目是否启用了实验性导航API,比如enableExperimentalNavigationApi,这类API可能和参数解析逻辑冲突。

4. 页面重组导致数据重置

  • 确认ProfileScreen中的邮件列表用了正确的状态容器(比如remember、viewModel的StateFlow),避免重组时mail对象被重置为默认实例(id为0)。
  • 在点击事件中打印mail的完整信息,确认触发导航时的mail是预期的对象,而不是重组后刷新的错误实例。

5. 目标页面参数默认值设置错误

  • 查看ShowMailScreenArgs的定义,是否给mailId设置了默认值0:
    data class ShowMailScreenArgs(val mailId: Int = 0) : NavArgs
    
    如果参数传递失败,会直接使用默认值0,需要确认路由拼接是否正确,或使用navigate的arguments参数传递时键名是否匹配。

6. 路由拼接的字符串处理问题

  • 如果用路由拼接传递参数(比如"show_mail/${mail.id}"),打印拼接后的完整路由,确认没有意外的空格、特殊字符,避免解析时无法转成Int而使用默认值0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 06:22:07