项目地址:点击打开链接(https://github.com/MrGaoGang/luckly_recyclerview)

使用RecyclerView封装headerview,footerView,并实现上拉加载更多,下拉刷新,分组功能(添加上拉加载和下拉刷新设置背景)

界面可能有点丑,但是是为了展示所有效果,请大家见谅。(所有东西都是可自己设置的哦)
效果图:   
如何获取: 
第一步:在项目的build.gradle中添加

 allprojects {repositories {...maven { url 'https://jitpack.io' }}
}

第二步:添加依赖

 dependencies {compile 'com.github.mrgaogang:luckly_recyclerview:v2.2.0'
}

一、部分方法介绍

1、设置加载更多的监听事件

 mLRecyclerView.setLoadMoreListener(this);

并重写onLoadMore()方法。

2、设置下拉刷新监听事件

 mLRecyclerView.setOnRefreshListener(this);

并重写onRefresh()方法。

3、添加分割线

已经封装好了线性布局的分割线和网格式布局的分割线、流式布局的分割线。
 //线性布局mLRecyclerView.addLinearDivider(LRecyclerView.VERTICAL_LIST);//网格式布局mLRecyclerView.addGridDivider();//可以指定颜色和宽度addGridDivider(int color, int dividerHeight)addLinearDivider(int oritation, int color, int lineWidth)

4、添加错误视图

当网络连接失败等情况的时候,需要显示错误视图。
 //添加错误的ViewmLRecyclerView.setErrorView(R.layout.error_view);//添加错误的ViewView error = LayoutInflater.from(this).inflate(R.layout.view_error, null, false);mLRecyclerView.setErrorView(error);

使用getErrorView()得到错误视图。

5、添加空视图

当数据为空的时候,需要显示。
 //添加空的ViewmLRecyclerView.setEmptyView(R.layout.empty_view);//添加空的ViewView empty = LayoutInflater.from(this).inflate(R.layout.view_empty, null, false);mLRecyclerView.setEmptyView(error);

使用getErrorView()得到空视图。

6、添加headerView

 //添加headerViewmLRecyclerView.addHeaderView(R.layout.header_view);//添加headerView,需要设置父类为mLRecyclerViewView headerView = LayoutInflater.from(this).inflate(R.layout.header_view, mLRecyclerView, false);mLRecyclerView.addHeaderView(headerView);
 //得到所有headerView视图。List<View> getHeaderViews();//得到所有headerView的个数。int getHeaderViewCount();

7、设置下拉刷新进度条的颜色和字体的颜色

 //改变下方加载进度的字体颜色mLRecyclerView.setLoadingTextColor(Color.BLUE);//改变下方加载进度条的颜色mLRecyclerView.setLoadingProgressColor(Color.BLUE);//修改下拉刷新颜色mLRecyclerView.setRefreshColor(getResources().getColor(R.color.colorAccent));

8、设置监听事件

     //设置点击事件,注意此处返回的position是包括了headerView和下拉加载的视图的mLRecyclerView.setOnItemClickListener(new LucklyRecyclerView.OnItemClickListener() {@Overridepublic void onItemClick(int position) {Log.i(TAG,"点击--->"+position);}@Overridepublic void onItemLongClick(int position) {Log.i(TAG,"长按--->"+position);}});

9、设置上拉加载和下拉刷新在不同的状态

 @Overridepublic void onLoadMore() {//设置处于正在加载状态mLRecyclerView.setLoading();new Handler().postDelayed(new Runnable() {@Overridepublic void run() {int count = dataAdapter.getItemCount() + 1;if (count < 50) {List<String> strings = new ArrayList<>();for (int i = count - 1; i < 5 + count; i++) {strings.add("数据" + i);}dataAdapter.addAll(strings);//设置数据已经加载完成状态mLRecyclerView.setLoadingComplete();} else {//设置没有更多数据状态,可以自定义现实的文字,上述的两个状态也都可以自定义文字mLRecyclerView.setLoadingNoMore("唉呀妈呀,没数据咯");}}}, 2000);}
   @Overridepublic void onRefresh() {mLRecyclerView.setRefreshEnable(true);new Handler().postDelayed(new Runnable() {@Overridepublic void run() {dataAdapter.clearAll();List<String> strings = new ArrayList<>();for (int i = 0; i < 30; i++) {strings.add("数据" + i);}dataAdapter.addAll(strings);mLRecyclerView.setRefreshComplete();}}, 5000);}

10、设置是否空白视图和错误视图点击刷新

 mLRecyclerView.setOnClickEmptyOrErrorToRefresh(true);

11、可设置下拉刷新和上拉加载的背景图片(可用于广告的放置哦)

注意:

  1. 如果在初始化的时候 直接设置了背景图片可不用刷新adapter。
  2. 如果通过网络获取到背景图片之后可以使用如下方法设置背景,但是需要添加一步:notifyItemChanged()
    //设置下拉刷新的背景图片(可放广告图片哦)mLRecyclerView.setRefreshBackground(getResources().getDrawable(R.drawable.headerback));//设置上拉加载部分设置背景图片(也可放广告哦)mLRecyclerView.setFooterBackground(getResources().getDrawable(R.drawable.footerback));//如果通过网络获取的footer图片,则需要调用以下:(如果是设置刷新部分的背景直接调用setRefreshBackground)mLRecyclerView.getOriginalRecyclerView().getAdapter().notifyItemChanged(mLRecyclerView.getOriginalRecyclerView().getAdapter().getItemCount() - 1);

二、如何实现分组

1、luckRecyclerView.setRecyclerViewType(LucklyRecyclerView.GROUP);

2、重写Adapter继承基类BaseGroupAdapter

需要重写的几个方法:

  /*** 第一层的数量** @return*/public abstract int getParentCount();/*** 每一个parent下的child的数量** @param parentPosition* @return*/public abstract int getChildCountForParent(int parentPosition);public abstract A onCreateParentViewHolder(ViewGroup parent, int viewType);public abstract B onCreateChildViewHolder(ViewGroup parent, int viewType);public abstract void onBindParentViewHolder(A holder, int position);/*** 分别是hoder,parent的位置(全局的位置)* child在parent中的index(不是position)** @param holder* @param parentPosition* @param childIndexForParent*/public abstract void onBindChildViewHolder(B holder, int parentPosition, int childIndexForParent);

在使用点击事件的时候要注意判断是否为Parent:

   luckRecyclerView.setOnItemClickListener(new LucklyRecyclerView.OnItemClickListener() {@Overridepublic void onItemClick(View rootView, int position) {if (mGroupAdapter.isParentView(position)){mGroupAdapter.showChild(rootView);}else {Toast.makeText(getApplicationContext(),"点击了第"+mGroupAdapter.getParentIndexFromChild(position)+"个parent的"+mGroupAdapter.getChildIndexForParent(position),Toast.LENGTH_SHORT).show();}}@Overridepublic void onItemLongClick(View rootView, int position) {}});

3、常用的几个方法

1、获取child在parent下的index

mGroupAdapter.getChildIndexForParent(position);

2、获取parent的index

mGroupAdapter.getParentIndexFromChild(position);

3、判断当前position是否为parentView

mGroupAdapter.isParentView(position);

三、具体如何使用请看例子

LucklyRecyclerView

欢迎关注我的微信公众号:

Android使用RecyclerView实现上拉加载更多,下拉刷新,分组显示相关推荐

  1. 结合SwipeRefreshLayout可以上拉加载更多下拉刷新的RecyclerView

    源码下载地址:http://download.csdn.net/detail/zhou_anzhuojinjie/9661542 话不多说直接上代码 dependencies {compile fil ...

  2. ListView上拉加载和下拉刷新多种实现方式

    ListView上拉加载和下拉刷新多种实现方式 该篇为ListView下拉刷新和上拉加载实现的各种方法大合集.可能在具体的细节逻辑上处理不太到位,但基本上完成逻辑的实现.细节方面,个人可以根据自己的需 ...

  3. better-scroll 上拉加载,下拉刷新(解决移动端长页面卡顿)

    一.Better Scroll 滚动原理 1.下图能直观的表示better-scroll的滚动原理 2.html设置 <div class="wrapper"> < ...

  4. 小程序上拉加载,下拉刷新

    小程序上拉加载,下拉刷新 data: {collectinformation: null,number: 1,size: 10,isOpenLoading: true,isEmpty: true,is ...

  5. 基于iSroll 5.0实现的上拉加载和下拉刷新插件

    Updownload.js 基于iSroll 5.0实现的上拉加载和下拉刷新插件 移动端效果比较好,开发者工具打开后,需要刷新下页面. [演示地址:] https://chenyk2016.githu ...

  6. tableview插入刷新_iOS开发之UITableView与UISearchController实现搜索及上拉加载,下拉刷新实例代码...

    废话不多说了,直接给大家贴代码了. 具体代码如下所示: #import "ViewController.h" #import "TuanGouModel.h" ...

  7. 让你的微信小程序对用户更加友好:上拉加载和下拉刷新就是关键

    前言 上拉加载和下拉刷新是小程序开发的常见需求.本文将介绍如何在微信小程序中实现上拉加载和下拉刷新的功能,为用户带来更加流畅.便捷的使用体验. 实现效果如下: 实现思路: 1. 首先需要在使用到的 j ...

  8. 如何实现上拉加载,下拉刷新?

    如何实现上拉加载,下拉刷新? 一.前言 二.实现原理 上拉加载 下拉刷新 三.案例 小结 一.前言 下拉刷新和上拉加载这两种交互方式通常出现在移动端中 本质上等同于PC网页中的分页,只是交互形式不同 ...

  9. 如何实现上拉加载和下拉刷新

    下拉刷新和上拉加载这两种交互⽅式通常出现在移动端中 本质上等同于PC⽹⻚中的分⻚,只是交互形式不同 开源社区也有很多优秀的解决⽅案,如 iscroll . better-scroll . pullto ...

  10. 【前端知识之JS】如何实现上拉加载和下拉刷新

    前言 本系列主要整理前端面试中需要掌握的知识点.本节介绍如何实现上拉加载和下拉刷新. 文章目录 前言 一.介绍 二.实现原理 1.上拉加载 2.下拉刷新 一.介绍 下拉刷新和上拉加载这两种交互方式通常 ...

最新文章

  1. 冲出UAC-解决Win UAC问题的编程经验
  2. java httpclient 获取cookie_java – 从httpclient 3转换为httpclient 4(Cookie策略)
  3. Java中的输入输出流
  4. 面向dba的linux shell 脚本简介,面向 DBA 的 Linux Shell 脚本简介
  5. .NET/C#程序开发中如何更优美地实现失败任务重试的逻辑?
  6. 前端学习(594):network面板
  7. CLion + OpenCV 开发
  8. PostgreSQL数值类型--浮点类型和序列
  9. java objects_Java Objects-------------工具类使用
  10. 移动机顶盒migu-jt-u1 unt400c刷机 hi3798 root
  11. 21种常见产品的电磁兼容检测项目与检测标准
  12. 散射理论对微波遥感的重要性
  13. oracle现金流量表逻辑,财务学习:现金流量表内在逻辑研究
  14. div+css实现圆形loading动画,渐变拖尾动画
  15. 红石32位cpu通用计算机,【TRP|HappyWater】32位红石电脑RSC-3230(无命令方块)
  16. 他如何从一位专车司机成功变身CEO?
  17. WireShark全版本下载
  18. 本科、硕士、博士的区别(终极版)
  19. python爬取小说爬取_用python爬取笔趣阁小说
  20. 微博登录记录pythonurllib_Python使用cookielib和urllib2模拟登陆新浪微博并抓取数据...

热门文章

  1. 《让子弹飞》系列——杀人不眨眼的老四
  2. PS安装完成后出现请卸载重新安装
  3. 数据库泰斗DeWitt:Shared-nothing架构落幕,Shared-storage架构归来
  4. C语言实现在15*15的大棋盘中下五子棋(支持人机博弈,人人博弈)
  5. 主流的知乎口碑营销方式有哪些
  6. nvida MDL introoduction
  7. Exchange(交换机)的作用以及类型
  8. 出售一系列设计软件及其他
  9. 记一次iconfont上传图标存在历史记录批量清除问题
  10. 从CMS垃圾回收器分析常用的垃圾回收算法