RecyclerView.Adapter的封装

前言


平时经常用RecyclerView,在使用adapter总觉得有很多重复的工作,今天就对它进行简单的封装一下。就是不想看到很多的adapter实现类,很多的ViewHolder类。下面是我实现的效果:

Lazy 是我加的动画延迟加载

setBindData() 就是设置每个item ,参数binding是ViewModule  source是每个item实际的bo。

onItemClick() 就是点击事件和网上一样

目标


1. 我使用的数据源经常是Collection,我用adapter关注的重点是给view设置值。所以我adapter只需要有那么一个方法做实际业务逻辑,例如:

public void onBindViewHolder( ViewModel ,每个Item的数据源 , 索引);

2. 我不想在看见 ViewHodler 初始化每个控件的动作。这时候我们想到了Google ViewBinding. 不过这里不详细叙述。

3. 现在不是讲究代码的优雅,我希望能想RxJava那么减少嵌套。

实现


OK,目标已经明确。那开始写代码。首先是ViewHodler,这个类其实就是装载控件的(有人说他是为了缓存,这个不管他,我指的是实际使用中)。我根本不想看到new 那么多静态内部类。

因为使用了ViewBinding,所以里面只有一个参数,就是ViewDataBinding的子类。代码如下:

RecyclerView.Adapter的封装_第1张图片

下面是实现Adapter,我只关系2个东西,1就是每个数据模型 DATA,2就是代表着界面的ViewModel;  所以定义2个泛型

他的构造方法需要 数据和界面模型,其实就是数据结果集和布局文件

RecyclerView.Adapter的封装_第2张图片

下面其实就是 RecycerView.Adapter 3个需要实现的方法

RecyclerView.Adapter的封装_第3张图片

onCreateViewHolder 这个其实就是ViewHolder的初始化过程,这里因为用了ViewBinding。所以代码会比较少。


RecyclerView.Adapter的封装_第4张图片

onBindViewHolder()的方法我没有截团全,因为下面是长按和异步加载的代码,没有多大意义。 这边的画就是提供了2种方式给外部调用,1. 子类 复写方法的方式 2. 通过bindData的代理方式。 

这个方法就不多介绍。


下面是点击事件的静态内部类,参数里面直接提供了,数据源和 view,不需要做动作的时候还要去取数据。

RecyclerView.Adapter的封装_第5张图片

今天先介绍到这.

你可能感兴趣的:(RecyclerView.Adapter的封装)