使用View Binding实现RecyclerView时,无法访问Item布局控件ID的问题
解决View Binding在RecyclerView适配器中无法访问Item控件ID的问题
你的问题核心是ViewHolder没有保留ItemBinding实例,导致在onBindViewHolder中只能拿到itemView,无法直接通过View Binding访问控件引用。按以下步骤修改即可:
1. 修改ViewHolder类
将ItemBinding作为ViewHolder的成员变量保存,后续就能通过ViewHolder直接获取binding对象:
class RecyclerviewAdapter(val data: List<Data>) : RecyclerView.Adapter<RecyclerviewAdapter.ViewHolder>() { // 保存ItemBinding引用到ViewHolder class ViewHolder(val binding: ItemBinding) : RecyclerView.ViewHolder(binding.root) override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val inflater = LayoutInflater.from(parent.context) val binding = ItemBinding.inflate(inflater, parent, false) return ViewHolder(binding) } override fun getItemCount(): Int { return data.size } override fun onBindViewHolder(holder: ViewHolder, position: Int) { val currentItem = data[position] // 直接通过holder.binding访问控件ID holder.binding.date.text = currentItem.date holder.binding.temperaturec.text = currentItem.temperatureC.toString() holder.binding.temperaturef.text = currentItem.temperatureF.toString() holder.binding.summary.text = currentItem.summary } }
2. 关键说明
- View Binding会根据
item.xml文件名自动生成对应的绑定类(即ItemBinding),所有带ID的控件都会成为该类的成员变量,比如date、temperaturec等。 - 只要在ViewHolder中保留
ItemBinding的引用,就能在onBindViewHolder里直接通过holder.binding.控件ID的方式访问并操作控件,无需再使用findViewById。
另外建议调整变量名规范:把大写的Data改为小写的data,符合Kotlin命名习惯。
内容的提问来源于stack exchange,提问作者birisininkodarsivi
相关产品推荐
相关产品推荐

