点此进入:从零快速构建APP系列目录导图
点此进入:UI编程系列目录导图
点此进入:四大组件系列目录导图
点此进入:数据网络和线程系列目录导图
如果你对RecyclerView还没有完全了解,可参看我的这一篇:
3.2.1 一篇文章完全掌握 RecycleView 的六大用法
想要知道 Kotlin 是如何简化我们的人生的个很有趣的方式就是去创造一个 RecyclerView 适配器,在上一篇中,我们学会了 RecyclerView 的使用,这一篇我们用 Kotlin 实现 RecyclerView 中用到的 Adapter,你会发现整个工程代码会用如此简单并且易懂的方式组织在一起。
一、Kotlin 中的 RecyclerView Adapter
我们会创造一个包含一个图片和一个标题的条目适配器,之所以做的如此简单,是因为我们不必花过多的精力在修改单个的条目上面,所以我们现在需要创建一个简单的数据类条目,然后创建一个适配器,最后把它放到 RecyclerView。
- 数据类条目
data class Item(val id: Long, val title: String, val url: String)
在我们这样定义过这个数据类之后,他就自己创建了它的构造器,并且他此时此刻已经有了自己的一些不可变的属性以及一些有用的函数实现,比如:equals 或 hashCode。
- 适配器 Adapter
适配器的结构如下,它会自己创建一些必须的方法:
class MyAdapter : RecyclerView.Adapter() {
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
}
override fun onBindViewHolder(holder: ViewHolder?, position: Int) {
}
override fun getItemCount(): Int {
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
}
这样我们就创建了一个由原始 ViewHolder 扩展而来的 ViewHolder 类,因为适配器需要原始抽象类的实现。另外,有些元素被标注为 nullable。这是因为如果库没有适当的 @NonNull 标注的话 Kotlin 就没有方法知道 null 类型是否是允许的,所以这就要让我们来决定了。如果我们通过默认方式创建方法了,它就会认为其值是 nullable,但是进一步研究支持库,我们就知道哪些值是为 null,所以我们在这里就能够删除它,于是代码可以简化成这样:
class MyAdapter : RecyclerView.Adapter() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
}
override fun getItemCount(): Int {
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
}