如果我这样做:
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 构造函数提供一个type(类似于您不定义List,而是定义List<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 是抽象。