android - 扩展 Recyclerview.Adapter 与 RecyclerView.Adapter 有什么区别在回收站视图中
问题描述
我一直在网上阅读有关 Android 中 RecyclerView 的信息。作为初学者,我看到一些在线教程扩展RecyclerView.Adapter<Subclass_RecyclerviewAdapter.ViewHolder>
了一些,有些RecylerView.Adapter
只是。实际上,它们之间有什么区别?哪个更好?
解决方案
如果我这样做:
class SimpleAdapter : RecyclerView.Adapter() { ... }
然后 Android Studio 说“一个类型参数应该用于类Adapther<VH: RecyclerView.ViewHolder!>
”。在 的源代码中RecyclerView
,您可以看到:
public class RecyclerView extends ViewGroup implements ScrollingView,
NestedScrollingChild2, NestedScrollingChild3 {
...
public abstract static class Adapter<VH extends ViewHolder> { ... }
...
}
这意味着您必须为构造函数提供一个类型(Adapter
类似于您不定义 aList
而是 aList<String>
例如)。
不过,这里有一点需要注意。您可以将RecyclerView.ViewHolder
其作为类型,也可以扩展此类并使用您的自定义ViewHolder
. 这允许您在 上定义自定义方法ViewHolder
,例如:
inner class SimpleViewHolder(private val view: View) : RecyclerView.ViewHolder(view) {
fun bind(text: String) {
// Bind to the view
}
}
编辑:重要的是,您会在适配器方法中收到您在构造函数中使用的类型,例如:override fun onBindViewHolder(holder: SimpleViewHolder, position: Int) { ... }
,然后您可以在其中使用自定义视图持有者中的方法。
而且,您必须有一个自定义 VH,因为 RecyclerView.ViewHolder 是abstract。
推荐阅读
- ios - 动态选择 UIPicker 的行
- php - PHP 编辑 stdClass 对象的值
- node.js - 使用 ng build --prod 构建时出错。没有 --prod 标志和 ng serve 很好
- sql - 多个集合的更新语句
- java - 通过 Rest API 调用存储过程字符串返回空而不是有效字符串
- flutter - Flutter AlertDialog,时间解雇问题
- javascript - 创建三个输入框,分别命名为 Min、Max 和 Mul,其中一个 Button 命名为“Validate”。使用 Javascript
- jmeter - 如何以 Mosquitto 发布者客户端将数据(上行链路措施)支持 MQTT 协议作为代理发布到物联网(TTN)
- python - 从多个帧切换时无法使 tkinter 帧居中
- batch-file - 批处理脚本 - 将一个从不完全相同的随机变量从命令拉到批处理脚本中的一行