RecyclerView中Extendeds Recyclerview.Adapter与RecyclerView.Adapter <SubclassRecyclerViewAdapter.ViewHolder>之间有什么区别

时间:2019-11-01 13:50:59

标签: android android-recyclerview android-viewholder

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

1 个答案:

答案 0 :(得分:1)

如果我这样做:

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是抽象