You need to enable JavaScript to run this app. 如何解决Android Safe Args传参后目标Fragment不显示的问题?
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Android Safe Args传参后目标Fragment不显示的问题?

核心故障点

定位到目标接收Fragment的onCreateView实现,存在视图返回逻辑错误:

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // 基于布局创建DataBinding实例,同时获取到绑定关系下的所有控件
    val binding: FragmentEntryBinding = DataBindingUtil.inflate(inflater,
        R.layout.fragment_entry, container, false)

    // 给绑定实例上的控件设置传递过来的参数
    binding.title.text = args.title
    binding.date.text = args.date
    binding.body.text = args.body

    // 错误逻辑:重新inflate了一次全新的布局实例并作为返回值
    // 这个新实例和之前设置过文本的绑定视图无任何关联,控件都是默认空状态
    return inflater.inflate(R.layout.fragment_entry, container, false)
}
  • 这是导致页面参数完全不显示的直接原因:系统最终渲染的是return语句返回的全新布局对象,你之前给binding控件设置的文本完全作用在另一个内存中的视图实例上,不会展示在屏幕上。
  • 修复方式:将返回值替换为return binding.root,直接返回DataBinding创建的、已经完成参数赋值的视图根节点。

配套校验项

  • 确认项目已正确配置Safe Args插件:检查模块级gradle依赖中是否引入了navigation-safe-args-gradle-plugin,完成项目同步后再重新运行,避免生成的Directions、Args类参数映射错位。
  • 确认导航图中argument配置和传参顺序一致:当前导航XML中entryFragment配置的三个string类型参数,和Adapter中传参的顺序、类型完全匹配,无类型不兼容问题。
  • 确认未手动清空Fragment的arguments:避免在导航跳转后通过代码手动调用fragment.arguments = null,导致navArgs()委托获取到空参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 17:45:00