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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:06:19