basequickadapter详解_BaseRecyclerViewAdapterHelper开源项目之BaseSectionQuickAdapter实现分组效果的源码学习...

version:2.8.5

今天我们来学习下BaseRecyclerViewAdapterHelpler开源项目中是如何实现分组想过的。

首先今天的学习我们还是按照前面的学习思路,根据getItemViewType->onCreateDefViewHolder->onBindViewHolder,即从确认viewholder类型->根据类型值创建viewholder->根据数据源类型绑定数据到viewholder上。

第一步:我们看一下BaseSectionQuickAdapter这个类的定义

public abstract class BaseSectionQuickAdapter extends BaseQuickAdapter {

跟前面分析的多类型BaseMultiItemQuickAdapter差不多,只是我们的数据源需要继承自SetionEntity。那么这个SetionEntity做了什么事呢,我们来看下源码:

package com.chad.library.adapter.base.entity;

/**

* https://github.com/CymChad/BaseRecyclerViewAdapterHelper

*/

public abstract class SectionEntity {

public boolean isHeader;

public T t;

public String header;

public SectionEntity(boolean isHeader, String header) {

this.isHeader = isHeader;

this.header = header;

this.t = null;

}

public SectionEntity(T t) {

this.isHeader = false;

this.header = null;

this.t = t;

}

}

从源码可以看出,他是一个抽象类,可能你会问,为什么要定义成抽象类呢,为什么不定义成接口或者普通类呢。

以下理由仅由我意想得出,大家也可以发表下自己的看法:

1、我们定义SectionEntity这个类,目的自然是希望用户的bean都具有某些规范,而我们的BaseSectionQuickAdapter将根据该规范进行数据的处理。虽然使用普通类一样能达到相同的效果,但是不推荐,我觉得这让有可能会让用户忽略我们所需要让用户知道的规范。

2、接口类,接口类其实是特殊的抽象类,上次分析的MultiItemEntity为什么又定义成接口类型呢,

public interface MultiItemEntity {

int getItemType();

}

根据实际需求而定,因为我们在实现多类型时,只需要用户的数据源提供一个类型值给我们即可,所以此时定义成接口类是最为合适的,因为用户数据源只要实现了该接口,他必须实现接口的方法,而我们需要的恰恰是在使用时调用该接口即可。

但是在SetionEntity中,我们帮用户多做点事,为其提供两个构造方法,一个时分组头,一个是分组体。而此时如果是定义成接口类,是不符合需求的,因为接口类的方法不能有方法体等。<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值