首页 > 解决方案 > 扩展 Recyclerview.Adapter 与 RecyclerView.Adapter 有什么区别在回收站视图中

问题描述

我一直在网上阅读有关 Android 中 RecyclerView 的信息。作为初学者,我看到一些在线教程扩展RecyclerView.Adapter<Subclass_RecyclerviewAdapter.ViewHolder>了一些,有些RecylerView.Adapter只是。实际上,它们之间有什么区别?哪个更好?

标签: androidandroid-recyclerviewandroid-viewholder

解决方案


如果我这样做:

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


推荐阅读