美文网首页
来!写一个带泛型的RecyclerView.Adapter玩玩儿

来!写一个带泛型的RecyclerView.Adapter玩玩儿

作者: 冷师傅_ | 来源:发表于2019-07-20 14:49 被阅读0次

Java版本

public abstract class BaseRecyclerViewAdapterJava<T,VH extends BaseRecyclerViewAdapterJava.ViewHolderJava<T>> extends RecyclerView.Adapter<VH> {

    private LayoutInflater inflater;
    private List<T> items;

    public BaseRecyclerViewAdapterJava(Context context) {
        this.inflater = LayoutInflater.from(context);
    }

    @NonNull @Override public abstract VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType);

    @Override public void onBindViewHolder(@NonNull VH holder, int position) {
        holder.bindView(items.get(position));
    }

    @Override public int getItemCount() {
        return items.size();
    }

    // 子类继承这个方法实现不同Item的布局即可
    abstract int getLayoutId();

    public static abstract class ViewHolderJava<T> extends RecyclerView.ViewHolder{

        public ViewHolderJava(@NonNull View itemView) {
            super(itemView);
        }
        
        // 绑定Item Data和View
        abstract void bindView(T t);
    }
}

Kotlin版本

abstract class BaseRecyclerViewAdapter<T,  VH : BaseRecyclerViewAdapter.BaseViewHolder<T>>(context: Context, items: List<T>) : RecyclerView.Adapter<VH>() {

    private val items = items

    private val inflater: LayoutInflater by lazy {
        LayoutInflater.from(context)
    }

    abstract override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH

    override fun getItemCount(): Int{
        return items.size
    }

    override fun onBindViewHolder(holder: VH, position: Int){
        holder.bindView(items[position])
    }

    abstract fun getLayoutId(): Int

    abstract class BaseViewHolder<T>(itemView: View) : RecyclerView.ViewHolder(itemView) {
        abstract fun bindView(t: T)
    }

}

总结:
我没有把点击监听加进去,保证了Adapter功能最精简,加进去也很简单,可以在继承BaseViewHolderbind方法里实现,也可以在Adapter里增加一个内部接口来实现。

相关文章

  • 来!写一个带泛型的RecyclerView.Adapter玩玩儿

    Java版本 Kotlin版本 总结:我没有把点击监听加进去,保证了Adapter功能最精简,加进去也很简单,可以...

  • Kotlin之泛型的实化、协变、逆变

    1、泛型的实化 Java中泛型是在JDK1.5引入的,是一个伪泛型,它是通过泛型擦除机制来实现的。泛型只存在编译时...

  • Dart匿名函数+泛型

    匿名函数使用 无参数的匿名函数 带参数的匿名函数 函数体只有一行时,简写 泛型的基本使用 泛型集合 泛型类 泛型方法

  • Kotlin-泛型和委托

    泛型 泛型的使用是为了程序有更好的扩展性。泛型类和泛型方法 泛型的高级特性java的泛型是通过类型擦除机制来实现的...

  • Java 泛型

    java 泛型 很多朋友对java的泛型不是很理解,很多文章写的已不是很清楚,这篇博客对java泛型进行 一个总结...

  • 【泛型】通配符与嵌套

    上一篇 【泛型】泛型的作用与定义 1 泛型分类 泛型可以分成泛型类、泛型方法和泛型接口 1.1 泛型类 一个泛型类...

  • Java泛型

    泛型有三种实现方式,分别是泛型接口、泛型类、泛型方法。下面通过泛型方法来介绍什么是类型参数。 泛型方法声明方式:访...

  • swift —— 泛型

    在尖括号中写一个名称,来创建一个泛型方法或是类型。例: 你可以以泛型形式创建函数和方法,也可以创建类,枚举,结构体...

  • java 泛型

    很多朋友对Java的泛型不是很理解,很多文章写的已不是很清楚,这篇博客对java泛型进行 一个总结。 泛型的转换:...

  • 数据结构与算法(Java)-002- Java功能复习

    泛型使用 1.在类名后面 <泛型名>2.在类中直接使用 泛型名 来定义变量类型3.在新建对象的时候,泛型名变成一个...

网友评论

      本文标题:来!写一个带泛型的RecyclerView.Adapter玩玩儿

      本文链接:https://www.haomeiwen.com/subject/aoiykctx.html