【问题标题】:what is the difference between extends Recyclerview.Adapter vs RecyclerView.Adapter<SubclassRecyclerViewAdapter.ViewHolder> in RecyclerViewRecyclerView 中扩展 Recyclerview.Adapter 与 RecyclerView.Adapter<SubclassRecyclerViewAdapter.ViewHolder> 有什么区别
【发布时间】:2019-11-01 13:50:59
【问题描述】:

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

【问题讨论】:

    标签: android android-recyclerview android-viewholder


    【解决方案1】:

    如果我这样做:

    class SimpleAdapter : RecyclerView.Adapter() { ... }
    

    然后 Android Studio 显示“类 Adapther&lt;VH: RecyclerView.ViewHolder!&gt; 需要一个类型参数”。在RecyclerView的源码中,可以看到:

    public class RecyclerView extends ViewGroup implements ScrollingView,
            NestedScrollingChild2, NestedScrollingChild3 {
    
        ...
    
        public abstract static class Adapter<VH extends ViewHolder> { ... }
    
        ... 
    
    }
    

    这意味着您必须为Adapter 构造函数提供一个type(类似于您不定义List,而是定义List&lt;String&gt; 的方式)。

    不过,这里有一点需要注意。您可以将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 是抽象

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 2015-04-11
      • 2021-09-16
      相关资源
      最近更新 更多