分析listview的源码,为recyclerview添加头部和底部

       现在Android技术要求越来越高了,本人决定把学习的知识记在上,一来可以记录自己的学习历程,二来也可以更好的理清思路,理解原理。  


      今天要写的是如何给recyclerview添加头部和底部,Android5.0后谷歌用recyclerview替代了原先的listview,但是没有添加头部和底部的方法,分析listview的源码,找到设置adapter的方法,如下图:


分析listview的源码,为recyclerview添加头部和底部_第1张图片

      我们关注上面的红色部分,可以看到如果用户设置了头部和底部,那么就对用户的adapter进行重新包装,设置一个新的adapter,HeaderViewListAdapter,让其去处理视图的显示逻辑,如果用户没有设置则用原来的adapter,我们再看listView添加头部的代码:

分析listview的源码,为recyclerview添加头部和底部_第2张图片

这里讲头部视图添加进来,传入新的adapter。我们再看HeaderViewListAdapter类主要关注构造方法和getView,getViewType方法:

分析listview的源码,为recyclerview添加头部和底部_第3张图片

构造方法:

构造方法里面主要是对头部和底部视图容器进行初始化

分析listview的源码,为recyclerview添加头部和底部_第4张图片

getViewType方法:

       这个方法里面主要是处理了不同的视图,返回不同的viewtype常量,然后在getView方法里面渲染出来。

getView方法:

分析listview的源码,为recyclerview添加头部和底部_第5张图片

在getview方法中,分别处理了头部和底部以及其他视图。

分析完了listview的源码,那么我们模仿着给recyclerview添加头部和底部,项目结构如下图:

分析listview的源码,为recyclerview添加头部和底部_第6张图片

主要是两个类,一个HeaderViewRecyclerAdapter,一个是WrapRecyclerView

HeaderViewRecyclerAdapter主要是继承recyclerview的adapter重新封装。

WrapRecyclerView主要是继承recyclerView添加头部和底部,以及设置adapter的逻辑处理。对recyclerview二次封装。

分析listview的源码,为recyclerview添加头部和底部_第7张图片

HeaderViewRecyclerAdapter中的主要方法:

onBindViewHolder,根据不同情况绑定不同的viewholder


分析listview的源码,为recyclerview添加头部和底部_第8张图片

getItemViewType方法,返回不同视图的常量type


分析listview的源码,为recyclerview添加头部和底部_第9张图片

onCreateViewHolder方法里面根据不同的viewType返回不同的holder


分析listview的源码,为recyclerview添加头部和底部_第10张图片

上图是WrapRecyclerView的主要方法,仿listview源码添加头发和底部,设置adapter。


运行效果图:


分析listview的源码,为recyclerview添加头部和底部_第11张图片

源码地址:http://download.csdn.net/detail/u013453973/9820755

你可能感兴趣的:(分析listview的源码,为recyclerview添加头部和底部)