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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:10:03