写点什么

Kotlin 实现 RecyclerView 适配器的标准写法

  • 2024-07-03
    上海
  • 本文字数:1627 字

    阅读完需:约 5 分钟

Kotlin 实现 RecyclerView 适配器的标准写法

在实现之前,不得不先了解一个概念 ViewHolder


在 Android 中,适配器模式通常用于将数据与列表视图(如 ListView 或 RecyclerView)进行绑定。ViewHolder 是在适配器模式中一个常见概念,在 Android 中用于优化列表性能。ViewHolder 的作用是持有列表项的视图组件的引用,并在适配器中进行缓存。


为了避免在 getView() onBindViewHolder() 方法中频繁地调用 findViewById() 。ViewHolder 模式的做法是在 getView()onBindViewHolder() 方法中使用一个内部类 ViewHolder 来持有列表项的视图组件的引用。通过在首次创建列表项时,通过 findViewById() 方法找到视图组件,并将其存储在 ViewHolder 对象中。然后,在后续调用中可以直接访问 ViewHolder 中的视图组件,而无需再次查找。


ViewHolder 的使用可以减少重复的查找操作,提高列表的滚动性能和响应速度。以下是具体实现步骤:


  1. 创建适配器类 MyAdapter,继承 RecyclerView.Adapter 适配器实例,并指定范型参数为 MyAdapter.ViewHolder,用于指定数据项的类型。


class MyAdapter(private val dataList: List<DataItem>) : RecyclerView.Adapter<MyAdapter.ViewHolder>() {    // ViewHolder 内部类和其他方法在这里实现}
复制代码


  1. 创建 ViewHolder 内部类


在适配器类中创建一个继承自 RecyclerView.ViewHolder 的内部类 ViewHolder,用于表示每个列表项的视图和相关操作;ViewHolder 的主构造函数要传入一个 View 参数,这个参数通常是 RecyclerView 子项的最外层布局,然后就可以通过 findViewById() 方法获取布局中的 textView 等实例。


例如:



class MyAdapter(private val dataList: List<DataItem>) : RecyclerView.Adapter<MyAdapter.ViewHolder>() { inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { // 在这里获取视图组件的引用 // 例如:val textView: TextView = itemView.findViewById(R.id.textView)}
// 其他方法在这里实现}
复制代码


  1. 重写必要的方法


主要有三个方法 onCreateViewHolder()onBindViewHolder()getItemCount()主要包括创建 ViewHolder,绑定数据以及获取数据项数量,例如


class MyAdapter(private val dataList: List<DataItem>) : RecyclerView.Adapter<MyAdapter.ViewHolder>() {
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { // 在这里获取视图组件的引用 // 例如:val textView: TextView = itemView.findViewById(R.id.textView) } // 创建 ViewHolder 实例,并将列表项的布局资源转换为视图 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val view = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false) return ViewHolder(view) } // 根据位置获取对应的数据项,并将数据绑定到 ViewHolder 中的视图组件上,会在每个子项被滚动到屏幕内时执行。 //通过posttion 参数得到当前项DataItem的实例,然后再将数据设置到ViewHolder的ImageView和TextView中。 override fun onBindViewHolder(holder: ViewHolder, position: Int) { val dataItem = dataList[position] // 在这里绑定数据到视图组件 // 例如:holder.textView.text = dataItem.text } // 在 getItemCount() 方法中返回数据项的数量;用于告诉 RecyclerView一共有多少子项。 override fun getItemCount(): Int { return dataList.size }}
复制代码

三个方法具体的含义已经在上述注释中写明。


  1. 适配器的使用


和 ListView 中的适配器差不多,首先创建适配器实例,并将其设置给 RecyclerView。


val recyclerView: RecyclerView = findViewById(R.id.recyclerView)val adapter = MyAdapter(dataList)recyclerView.adapter = adapter
复制代码


至此,标准的 RecyclerView 适配器 就构建完成啦。

发布于: 刚刚阅读数: 4
用户头像

出来乍到的程序猿,有一颗成为IT精英的梦想 2020-08-28 加入

座右铭:不想当开发的测试,不是一个好测试✌️。 我是一个致力于测试开发的博主,主要职责:测试开发、CI/CD,偶尔跟着开发学习音视频知识,希望输出的内容可以帮助和我一样初入职场,经验不足的小白。

评论

发布
暂无评论
Kotlin 实现 RecyclerView 适配器的标准写法_kotlin_小曾同学.com_InfoQ写作社区