
Adapter 的使用 2
多布局
对于多布局,提供了:
BaseMultiItemQuickAdapter、BaseDelegateMultiAdapter、BaseProviderMultiAdapter
三种基础类型。
1、BaseMultiItemQuickAdapter
说明:适用于类型较少,业务不复杂的场景,便于快速使用。
所有的数据类型,都必须实现MultiItemEntity接口(注意,这里不是继承抽象类,而是实现接口,避免对业务的实体类带来影响)
数据实体类写法:
2、BaseDelegateMultiAdapter
说明:通过代理类的方式,返回布局 id 和 item 类型;
适用于: 1、实体类不方便扩展,此Adapter的数据类型可以是任意类型,只需要在BaseMultiTypeDelegate.getItemType中返回对应类型 2、item 类型较少 如果类型较多,为了方便隔离各类型的业务逻辑,推荐使用BaseProviderMultiAdapter
方式一:
方式二:
3、BaseProviderMultiAdapter
说明:当有多种条目的时候,避免在convert()中做太多的业务逻辑,把逻辑放在对应的 ItemProvider 中。以及最大化自定义VH类型。
1、此Adapter的数据类型可以是任意类型,只需要在getItemType中返回对应类型 2、Adapter不限定ViewHolder类型。ViewHolder 由 BaseItemProvider 实现,并且每个BaseItemProvider可以拥有自己类型的ViewHolder类型。
第一步,Adapter代码如下:
第二步,Provider代码如下:
BaseSectionQuickAdapter
说明:快速实现带头部的 Adapter,由于本质属于多布局,所以继承自 BaseMultiItemQuickAdapter。(只有一种布局类型的头部!)
数据实体类不再是实现MultiItemEntity接口!!!
为了方便快速使用,对MultiItemEntity进行了再次封装。
情况分别为下:
1、Kotlin实现SectionEntity接口!
1、Java则继承JSectionEntity抽象类!
JSectionEntity是实现于SectionEntity接口,java进了再一次的封装是因为:
SectionEntity接口是使用Kotlin编写的,里面对接口方法进行了默认实现,一般情况下,使用者的数据实体类不需要重写此方法,而java7 无法具有接口默认实现的特性,这就导致使用者必须自己重写此方法。所以 java 使用抽象类进行了再次封装,在抽象类中进行了默认实现。
此种处理处理措施,必定影响使用者 java 数据类的类继承问题,对此表示抱歉,由于java特性的缺失,不得不做出的妥协。如果实在无法继承JSectionEntity抽象类,请自己再次封装一下,或者请使用BaseDelegateMultiAdapter自行参考实现Section。
1、快速使用
Adapter代码如下:
实体类的写法:
2、多布局类型 BaseSectionQuickAdapter
Adapter代码如下:
数据实体类,多了重写itemType方法:
