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

ViewBinding与Intent.putExtra配合失效,EditText数据无法传递

问题

我是ViewBinding新手,使用findViewById结合Intent.putExtra传递字符串数据一切正常,但使用ViewBinding时却出现问题。以下是我的代码:

class MainActivity : AppCompatActivity() {

    companion object{
        const val camlinOrderKey = "com.example.mk_order.MainActivity.camlinOrderKey"
        const val flairOrderKey = "com.example.mk_order.MainActivity.flairOrderKey"
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        var binding: ActivityMainBinding
        binding = ActivityMainBinding.inflate(layoutInflater)

        val eT1 = findViewById<EditText>(R.id.eT1)
        // val eT2 = findViewById<EditText>(R.id.eT2)
        val btnOrder = findViewById<Button>(R.id.btnOrder)

        btnOrder.setOnClickListener {
            val reviewIntent = Intent(this, ReviewOrder::class.java)

            val camlinOrder = eT1.text.toString()
            val flairOrder = binding.eT2.text.toString()

            reviewIntent.putExtra(camlinOrderKey, camlinOrder)
            reviewIntent.putExtra(flairOrderKey, flairOrder)

            startActivity(reviewIntent)
        }
    }
}

使用findViewById的eT1能在新页面正常显示数据,但通过binding获取的eT2数据为空,且没有报错信息。

问题排查与解决

  • 核心原因:同时使用setContentView(R.layout.activity_main)和ActivityMainBinding.inflate(layoutInflater),但未将binding的根视图设置为Activity的内容视图。这会导致binding.eT2指向的是一个未渲染到屏幕上的全新EditText实例,而非用户输入内容的那个控件,自然获取不到输入文本。

  • 修复代码:将原有的视图初始化代码替换为正确的ViewBinding使用方式:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // 初始化binding并将根视图设置为Activity内容
    val binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)

    // 所有控件都通过binding获取,无需再用findViewById
    binding.btnOrder.setOnClickListener {
        val reviewIntent = Intent(this, ReviewOrder::class.java)

        val camlinOrder = binding.eT1.text.toString()
        val flairOrder = binding.eT2.text.toString()

        reviewIntent.putExtra(camlinOrderKey, camlinOrder)
        reviewIntent.putExtra(flairOrderKey, flairOrder)

        startActivity(reviewIntent)
    }
}
  • 额外优化:既然已经使用ViewBinding,建议统一通过binding获取所有控件,彻底替代findViewById,避免混用导致的类似问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:12:38