为RecyclerView添加头视图和尾视图

大家都知道RecyclerView本身是没有实现头视图和尾视图的,但是我们也有方法。今天我们实现的是将RecyclerView变成GirdLayout布局实现头视图和尾视图。原理很简单,就是通过getItemViewType()方法将RecyclerView中所有的item进行分类,以前我们对ListView进行分组也是通过这个方法进行实现,所不同的时最后我们还要设置头视图和尾视图的占位。好了,现在我们直接进入代码讲解。

首先,我们建立一个抽象类SectionForRecyclerViewAdapter,我们在定义三个泛型<Hextends RecyclerView.ViewHolder,VH extends RecyclerView.ViewHolder,F extends RecyclerView.ViewHolder>分别继承RecyclerView.ViewHolder,其中<H>类是继承RecyclerView.ViewHolder的header视图,<VH>类是继承RecyclerView.ViewHolder的item视图,<F>类是继承RecyclerView.ViewHolder的footer视图,最后抽象类在继承RecyclerView.Adapter<RecyclerView.ViewHolder>完整的代码如下:

<pre name="code" class="java">public abstract class SectionForRecyclerViewAdapter<H extends RecyclerView.ViewHolder,
        VH extends RecyclerView.ViewHolder,
        F extends RecyclerView.ViewHolder>
        extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
}

 

接下来,我们开始我们开始定义我们所需要的变量。首先定义三个分别代表三个类型的三个静态常量:

private static final int TYPE_SECTION_HEADER = -1;
private static final int TYPE_SECTION_FOOTER = -2;
private static final int TYEP_ITEM = -3;

接着定义可记录RecyclerView中每个item是属于第几组,在组中的位置数变量:

private int[] sectionForPosition = null;//第几组
private int[] positionWithInSection = null;//在组中的位置数<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">	</span>

最后,我们定义RecyclerView中每个item是否是header视图,footer视图的boolean数组和总item数:

<pre name="code" class="java">private boolean[] isHeader = null;
private boolean[] isFooter = null;
private int count = 0;//总数量

 
 

好了,所有所需要的变量我们就定义好了,完整的代码如下:

<pre name="code" class="java">public abstract class SectionForRecyclerViewAdapter<H extends RecyclerView.ViewHolder,
        VH extends RecyclerView.ViewHolder,
        F extends RecyclerView.ViewHolder>
        extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

    private static final int TYPE_SECTION_HEADER = -1;
    private static final int TYPE_SECTION_FOOTER = -2;
    private static final int TYEP_ITEM = -3;

    private int[] sectionForPosition = null;//第几组
    private int[] positionWithInSection = null;//在组中的位置数
    private boolean[] isHeader = null;
    private boolean[] isFooter = null;
    private int count = 0;//总数量
}

 

抽象类嘛,对吧,那我们肯定是需要抽象方法的呀,那么下面我们就开始定义要被子类所实现的抽象方法:

<pre name="code" class="objc">//第一个方法,获取组数:
protected abstract int getSectionCount();
//第二个方法,获取每组item数:
protected abstract int getItemCountForSection(int section);
//第三个方法,判断是否有footer视图:
protected abstract boolean hasFooterInSection(int section);
//第四个方法,用类H创建header视图,所需参数同RecyclerView中的onCreateViewHolder一样:
protected abstract H onCreateSectionHeaderViewHolder(ViewGroup parent, int viewType);

                
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值