从Kotlin Synthetic迁移到ViewBinding:AddOrderActivity代码修改方案
针对AddOrderActivity.kt的ViewBinding迁移完整修改步骤
1. 声明ViewBinding实例变量
在AddOrderActivity类内部、onCreate方法之前,添加ViewBinding的延迟初始化变量:
private lateinit var binding: ActivityAddOrderBinding
注意:ActivityAddOrderBinding是根据布局文件名自动生成的——如果你的布局文件是activity_add_order.xml,生成的Binding类名就是驼峰式的ActivityAddOrderBinding,布局名不同请对应修改。
2. 修改onCreate方法初始化Binding
替换原来的setContentView代码,改为初始化Binding并设置根视图:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 替换原 setContentView(R.layout.activity_add_order) 代码 binding = ActivityAddOrderBinding.inflate(layoutInflater) setContentView(binding.root) // 原有初始化逻辑(如RecyclerView适配器设置、按钮点击事件等)可保留,但控件引用需修改 }
3. 替换所有控件引用
将原来直接用控件ID调用的代码,全部改为通过binding.控件ID的方式访问,举几个常见示例:
- 原
rv_list.adapter = orderAdapter→ 修改为binding.rv_list.adapter = orderAdapter - 原
btn_submit.setOnClickListener { ... }→ 修改为binding.btn_submit.setOnClickListener { ... } - 原
tv_order_title.text = "新增订单"→ 修改为binding.tv_order_title.text = "新增订单"
所有之前用Kotlin Synthetic直接引用的控件,都要加上binding.前缀
额外注意事项
- 如果布局里有
<include>标签,要确保被包含的布局也启用了ViewBinding,访问子控件时需用binding.include布局ID.子控件ID的格式 - 确认已经彻底删除所有Kotlin Synthetic相关的导入语句(比如
import kotlinx.android.synthetic.main.activity_add_order.*)
内容的提问来源于stack exchange,提问作者Mck
相关产品推荐
相关产品推荐

