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
相关产品推荐
相关产品推荐

