Android使用RecyclerView实现上拉加载更多,下拉刷新,分组显示
项目地址:点击打开链接(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、可设置下拉刷新和上拉加载的背景图片(可用于广告的放置哦)
注意:
- 如果在初始化的时候 直接设置了背景图片可不用刷新adapter。
- 如果通过网络获取到背景图片之后可以使用如下方法设置背景,但是需要添加一步: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实现上拉加载更多,下拉刷新,分组显示相关推荐
- 结合SwipeRefreshLayout可以上拉加载更多下拉刷新的RecyclerView
源码下载地址:http://download.csdn.net/detail/zhou_anzhuojinjie/9661542 话不多说直接上代码 dependencies {compile fil ...
- ListView上拉加载和下拉刷新多种实现方式
ListView上拉加载和下拉刷新多种实现方式 该篇为ListView下拉刷新和上拉加载实现的各种方法大合集.可能在具体的细节逻辑上处理不太到位,但基本上完成逻辑的实现.细节方面,个人可以根据自己的需 ...
- better-scroll 上拉加载,下拉刷新(解决移动端长页面卡顿)
一.Better Scroll 滚动原理 1.下图能直观的表示better-scroll的滚动原理 2.html设置 <div class="wrapper"> < ...
- 小程序上拉加载,下拉刷新
小程序上拉加载,下拉刷新 data: {collectinformation: null,number: 1,size: 10,isOpenLoading: true,isEmpty: true,is ...
- 基于iSroll 5.0实现的上拉加载和下拉刷新插件
Updownload.js 基于iSroll 5.0实现的上拉加载和下拉刷新插件 移动端效果比较好,开发者工具打开后,需要刷新下页面. [演示地址:] https://chenyk2016.githu ...
- tableview插入刷新_iOS开发之UITableView与UISearchController实现搜索及上拉加载,下拉刷新实例代码...
废话不多说了,直接给大家贴代码了. 具体代码如下所示: #import "ViewController.h" #import "TuanGouModel.h" ...
- 让你的微信小程序对用户更加友好:上拉加载和下拉刷新就是关键
前言 上拉加载和下拉刷新是小程序开发的常见需求.本文将介绍如何在微信小程序中实现上拉加载和下拉刷新的功能,为用户带来更加流畅.便捷的使用体验. 实现效果如下: 实现思路: 1. 首先需要在使用到的 j ...
- 如何实现上拉加载,下拉刷新?
如何实现上拉加载,下拉刷新? 一.前言 二.实现原理 上拉加载 下拉刷新 三.案例 小结 一.前言 下拉刷新和上拉加载这两种交互方式通常出现在移动端中 本质上等同于PC网页中的分页,只是交互形式不同 ...
- 如何实现上拉加载和下拉刷新
下拉刷新和上拉加载这两种交互⽅式通常出现在移动端中 本质上等同于PC⽹⻚中的分⻚,只是交互形式不同 开源社区也有很多优秀的解决⽅案,如 iscroll . better-scroll . pullto ...
- 【前端知识之JS】如何实现上拉加载和下拉刷新
前言 本系列主要整理前端面试中需要掌握的知识点.本节介绍如何实现上拉加载和下拉刷新. 文章目录 前言 一.介绍 二.实现原理 1.上拉加载 2.下拉刷新 一.介绍 下拉刷新和上拉加载这两种交互方式通常 ...
最新文章
- 冲出UAC-解决Win UAC问题的编程经验
- java httpclient 获取cookie_java – 从httpclient 3转换为httpclient 4(Cookie策略)
- Java中的输入输出流
- 面向dba的linux shell 脚本简介,面向 DBA 的 Linux Shell 脚本简介
- .NET/C#程序开发中如何更优美地实现失败任务重试的逻辑?
- 前端学习(594):network面板
- CLion + OpenCV 开发
- PostgreSQL数值类型--浮点类型和序列
- java objects_Java Objects-------------工具类使用
- 移动机顶盒migu-jt-u1 unt400c刷机 hi3798 root
- 21种常见产品的电磁兼容检测项目与检测标准
- 散射理论对微波遥感的重要性
- oracle现金流量表逻辑,财务学习:现金流量表内在逻辑研究
- div+css实现圆形loading动画,渐变拖尾动画
- 红石32位cpu通用计算机,【TRP|HappyWater】32位红石电脑RSC-3230(无命令方块)
- 他如何从一位专车司机成功变身CEO?
- WireShark全版本下载
- 本科、硕士、博士的区别(终极版)
- python爬取小说爬取_用python爬取笔趣阁小说
- 微博登录记录pythonurllib_Python使用cookielib和urllib2模拟登陆新浪微博并抓取数据...