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

如何通过Bundle修改Fragment的TextView文本?为何获取值为null?

问题分析与解决步骤

你的问题出在两个核心点:未将创建的Bundle绑定到Fragment的arguments属性,以及错误使用savedInstanceState获取初始化参数。以下是具体修正方案:

1. 修正newInstance方法

你创建了Bundle但没有将其赋值给Fragment的arguments,导致Fragment无法接收到传递的参数。修改代码如下:

fun newInstance(title: String): ProduceFragment {
    val frag = ProduceFragment()
    val bundle = Bundle()
    bundle.putString(titleKey, title)
    frag.arguments = bundle // 关键:将Bundle绑定到Fragment的arguments
    Log.d("XXX", "title $title")
    return frag
}

2. 修正onViewCreated方法

savedInstanceState是用于Fragment销毁重建时恢复状态的容器,并非传递初始化参数的地方。你需要从Fragment的arguments中读取参数,且你存储的是String类型,不能用getBundle方法:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    // 从arguments中获取字符串,添加默认值避免空指针异常
    val text = arguments?.getString(titleKey) ?: "默认标题"
    binding.title.text = text
}

补充说明

  • arguments是Fragment专门用于接收初始化参数的Bundle,只要Fragment实例未被销毁,这个Bundle就会持续存在。
  • 仅当需要处理Fragment销毁重建的临时状态保存时,才需要使用savedInstanceState——比如在onSaveInstanceState中保存用户输入的临时数据,再在onViewCreated中恢复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:50:28