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

Kotlin开发RecyclerView无法从itemView访问控件id怎么办

问题背景
  • 学习使用Kotlin实现RecyclerView组件时,参考的教程说明可以从itemView直接访问布局中id为tvTitle、cbDone的控件
  • 实际编码时IDE没有给出对应代码提示,手动输入相关代码会直接报错,无法从itemView访问对应控件id
根本原因

你参考的是较老版本的Android开发教程,这类教程依赖的Kotlin Android Extensions插件已经被Google官方正式废弃并移除,新版Android Studio创建的项目默认不会集成这个插件,自然不支持直接通过控件id访问视图实例的语法。

可行解决方案

你可以根据项目需求选择以下任意一种方案解决:

方案1:使用ViewBinding(官方首选推荐)

这是目前Android官方推荐的视图访问方案,具备空安全、类型安全的特性,配置步骤如下:

  1. 打开对应模块的build.gradle(模块级,不是项目级),在android配置块下开启ViewBinding:
android {
    // 其他现有配置保持不变
    buildFeatures {
        viewBinding true
    }
}
  1. 同步Gradle配置后,修改RecyclerView的Adapter实现,通过布局自动生成的Binding类持有控件引用,参考实现:
class MyListAdapter(private val dataList: List<MyData>) : RecyclerView.Adapter<MyListAdapter.ListViewHolder>() {

    inner class ListViewHolder(val binding: ItemListBinding) : RecyclerView.ViewHolder(binding.root)

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ListViewHolder {
        val binding = ItemListBinding.inflate(
            LayoutInflater.from(parent.context),
            parent,
            false
        )
        return ListViewHolder(binding)
    }

    override fun onBindViewHolder(holder: ListViewHolder, position: Int) {
        val item = dataList[position]
        // 直接通过binding实例访问对应id的控件
        holder.binding.tvTitle.text = item.title
        holder.binding.cbDone.isChecked = item.isDone
    }

    override fun getItemCount(): Int = dataList.size
}

注意:自动生成的Binding类名和你的item布局文件名对应:如果item布局文件名为item_list.xml,生成的Binding类就是ItemListBinding,命名规则为去掉文件名的下划线、转为大驼峰格式后追加Binding后缀。

方案2:手动调用findViewById(适合简单临时场景)

如果不想引入ViewBinding,可以在ViewHolder初始化时手动通过findViewById获取控件实例,参考代码:

inner class ListViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    val tvTitle: TextView = itemView.findViewById(R.id.tvTitle)
    val cbDone: CheckBox = itemView.findViewById(R.id.cbDone)
}

后续在onBindViewHolder生命周期中,直接通过holder持有的控件引用操作即可。

该方案没有空安全、类型安全校验,控件id写错、类型不匹配时会在运行时才崩溃,不建议在复杂项目中使用。

方案3:回退使用废弃的Kotlin Android Extensions(极度不推荐)

如果只是想临时跑通老教程的代码,可以在模块级build.gradle中手动添加废弃插件的配置:

apply plugin: 'kotlin-android-extensions'

同步Gradle后即可恢复直接通过id访问控件的能力,但该插件已经停止维护,在新版AGP、Kotlin版本中会出现兼容性问题,绝对不要在正式生产项目中使用。


内容的提问来源于stack exchange,提问作者Anindra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:42:52