天天看点

XCoreRecyclerAdapter:更好用的Adapter For RecyclerView

每当我们使用recyclerview写一个列表的时候,都需要写类似的如下代码:

那么,我们一般必不可少的是写一个adapter,比如,为了支持多种类型,我们需要重写getitemviewtype、oncreateviewholder、onbindviewholder等方法。比如:

按照上述写法,每当我们需要增加一种类型的时候,都需要修改testrecycleradapter的代码,在oncreateviewholder等方法中添加对应的代码。后来大家觉得这个挺烦的,然后就把oncreateviewholder中的switch语句放到工厂类当中,这一定层度上缓解了修改adapter的频率。那么,我们能不能写一个相对通用的adapter呢?

我们希望做到如下目标:

1).adapter通用化,无需每次新建adapter

2).item(cell)的组件是插件式的,解耦,并可复用

用代码描述为:

插件式的通用xcorerecycleradapter的原理图如下:

XCoreRecyclerAdapter:更好用的Adapter For RecyclerView

每当我们需要添加一个新的类型时,只需要一下几步:

1.新建一个todoitemuicomponent组件,继承自xcoreitemuicomponent

2.注册新增的组件todoitemuicomponent

3.数据源实现idatacomponent接口

getviewtype和组件todoitemuicomponent的getviewtype匹配即可;

这样,每次新增一种新的类型的item时,无需修改adapter的代码。并且,item的组件是可复用的。

那么具体怎么设计的呢?

首先对数据源进行抽象:在adapter列表中,需要根据数据源data的不同类型,选择不同的viewholder。所以,数据源必须有一个gettype的方法。

itemuicomponent组件负责某一类type的管理。为了做到插件式,它必须实现的方法有:

oncreateview方法

该方法是用于生成item的根view的。当adapter调用oncreateviewholder时,该方法会被调用。注意,子view的初始化,不要写在oncreateview中。需要写在onviewcreated方法中。

onviewcreated方法

创建完itemcomponent之后,就会立即回调该方法,view的初始化请写在这里。

getviewtype方法

该方法是为了和数据源进行关联的,数据源的getviewtype方法和组件的getviewtype方法的值一致时,即完成匹配。

bindview方法

该方法会在adapter回调onbindviewholder

数据源和item组件都已经定义好,那么,核心的xcorerecycleradapter源码应该怎么做呢?

本篇博客主要是介绍通用的xcorerecycleradapter引擎,极大提高了adapter的复用率,让开发集中把精力集中在必要的业务代码上,提高开发效率。另外,与xcorerecycleradapter引擎相配套的还有ui组件化、数据控制框架xcoreredux、数据绑定等。请参考下一遍博客:《android redux实践与ui组件化:xcoreredux框架》(ing...)