Android使用ViewBinding给TextView赋值后UI不更新问题
问题根因
核心错误出在视图绑定的加载逻辑:你已经通过ActivityShoeDetailsBinding.inflate(layoutInflater)生成了绑定类实例,也拿到了对应的根视图binding.root,但调用setContentView()时传入的仍然是布局IDR.layout.activity_shoe_details。这个操作会让系统重新inflate一份全新的布局实例挂载到界面上,你后续操作的binding实例持有的是第一份从未被挂载到窗口的视图,所以对TextView的文本修改不会同步到当前显示的UI上,哪怕Intent参数接收完全正常也不会生效。
修复方法
将setContentView()的入参替换为已经inflate完成的绑定类根视图即可,修正后的核心实现代码:
class ShoeDetails : AppCompatActivity() { private lateinit var binding: ActivityShoeDetailsBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityShoeDetailsBinding.inflate(layoutInflater) // 传入绑定类持有的根视图,不要重复传入布局ID setContentView(binding.root) val title = intent.getStringExtra("Title") val model = intent.getStringExtra("Model") val kmused = intent.getStringExtra("KmUsed")?.toFloat() val kmestimated = intent.getStringExtra("KmEstimated")?.toFloat() binding.textView12.text = model binding.textView10.text = title binding.textView15.text = kmused.toString() binding.textView16.text = kmestimated.toString() } }
优化建议
- 类名遵循Kotlin大驼峰命名规范,建议将原类名
shoeDetails调整为ShoeDetails - 针对Intent取参可能为null的场景,建议设置兜底默认值,避免界面直接显示"null"字符串,例如:
binding.textView12.text = model ?: "暂无型号"
内容的提问来源于stack exchange,提问作者Frederico Nicola
相关产品推荐
相关产品推荐

