如何通过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
相关产品推荐
相关产品推荐

