同上节课一样,由于kotlin-android-extensions 插件废弃,导致holder.itemView.item_image以及holder.itemView.item_title相关的代码全都失效,DeepSeek解释说:“holder.itemView.itemImage 是 kotlin-android-extensions 的语法糖,它本质上等价于 holder.itemView.findViewById<ImageView>(R.id.itemImage),但废弃插件后此功能已失效。直接通过 ID 访问视图的方式已被完全移除,必须显式绑定”。下面是它给出的代码。好耶!我好像明白view binding是怎么回事了!我可以举一反三啦!
inner class MyAdapter : RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
// 使用 View Binding 的 ViewHolder
inner class MyViewHolder(private val binding: ItemViewLinearVerticalBinding) :
RecyclerView.ViewHolder(binding.root) {
// 直接通过 binding 访问视图
fun bind() {
binding.itemImage.setImageResource(R.drawable.icon_jetpack)
// 可以在这里添加语句,绑定其他控件
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
// 通过 Binding 类加载布局
val binding = ItemViewLinearVerticalBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
return MyViewHolder(binding)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.bind() // 调用 ViewHolder 的绑定方法
}
override fun getItemCount() = 20
}