Android 整合实现简单易用、功能强大的RecyclerView
之前总是会有人在一些开发群里问,有木有比较好使且功能强大些的RecyclerVew,比如支持下来刷新,加载更多等,还有人在问,如何为RecyclerView添加分割线,尤其是如何为网格布局添加分割线? 热心的群友会有一堆推荐,当然也不乏好事者来这么一句,自己封装去。。。。
我自己也用了挺久的RecyclerView,在使用过程中,往往也会碰到各种各样的需求、设计,秉着不重复造轮子的原则,我在github上也搜过挺多二次封装的RecyclerView,最后选择了那么几个,重新再次整合、封装,形成了现有的、也是我常用的RecyclerView库,现支持:
功能:
1. 普通列表功能、为列表添加分割线,设置分割线高度(宽度)、颜色等。
2. 网格列表功能、为网格列表添加分割线,设置分割线高度(宽度)、颜色等。
3. 普通列表、网格列表均支持滑动加载更多数据功能,并在网络失败情况下,添加了提醒重新加载功能(可看下面示意图)。
4. 普通列表、网格列表均支持添加Header功能。 再不需要加载更多数据情况下,支持添加Footer。
5. 未扩展下拉刷新功能,如需要,请使用android官方提供的SwipeRefreshLayout 。
在介绍我整合的项目之前,有必要先说明下我整合的两个最重要的库,他们才是真的原创,希望大家尊重原创。
Thanks:
该项目主要整合了两个开源项目,是在它们的基础上进行的再创造:
1. RecyclerView分割线:https://github.com/yqritc/RecyclerView-FlexibleDivider
2. RecyclerView添加HeaderView和FooterView:https://github.com/cundong/HeaderAndFooterRecyclerView
效果图:
· 垂直列表,添加分割线
· 网格列表,添加分割线
· 垂直列表,添加HeaderView
· 网格列表,添加HeaderView
· 加载更多数据网络错误时,提示重新加载。
实现:
关于该库是如何整合的,此处不多介绍的,有兴趣的人可以下载源码去看看,当然,不足之处,也可以进行再次扩展。
关于该库的使用,我还是建议大家该library下载下来,导入自己项目,这样也方便自己随意修改使用。
1. 实现垂直列表
private void initView() { listWeChats = (RecyclerView) findViewById(R.id.listWeChats); mDatas = new ArrayList<>(); WeChatListAdapter weChatListAdapter = new WeChatListAdapter(this, mDatas, onClickListener);
HeaderAndFooterRecyclerViewAdapter recyclerViewAdapter = new HeaderAndFooterRecyclerViewAdapter(weChatListAdapter);
listWeChats.setAdapter(recyclerViewAdapter); listWeChats.setLayoutManager(new LinearLayoutManager(this));
listWeChats.addItemDecoration(
new HorizontalDividerItemDecoration.Builder(WChatListActivity.this)
.color(Color.parseColor("#00c7c0"))
.sizeResId(R.dimen.list_divider_height)
.showLastDivider()
.marginResId(R.dimen.list_divider_left_margin, R.dimen.list_divider_right_margin)
.build(false)); listWeChats.addOnScrollListener(mOnScrollListener);
}
简析:HeaderAndFooterRecyclerViewAdapter主要是为了是对RecyclerView.Adapter的扩展实现,通过它,可以添加HeaderView和FooterView(具体可看源码)。HorizontalDividerItemDecoration则是扩展了RecyclerView.ItemDecoration,用于为垂直列表添加分割线,如果你是一个横向的列表,则可以使用另一个
ItemDecoration的实现:VerticalDividerItemDecoration。具体的使用可参加项目的示例。
2. 实现网格列表
private void initView() { listWeChats = (RecyclerView) findViewById(R.id.listWeChats); mDatas = new ArrayList<>(); WeChatListAdapter weChatListAdapter = new WeChatListAdapter(this, mDatas, onClickListener); HeaderAndFooterRecyclerViewAdapter recyclerViewAdapter = new HeaderAndFooterRecyclerViewAdapter(weChatListAdapter);
listWeChats.setAdapter(recyclerViewAdapter); GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
gridLayoutManager.setSpanSizeLookup(new HeaderSpanSizeLookup((HeaderAndFooterRecyclerViewAdapter) listWeChats.getAdapter(), gridLayoutManager.getSpanCount()));
listWeChats.setLayoutManager(gridLayoutManager); // Drawable mDivider = getResources().getDrawable(R.drawable.list_divider);
// ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#00c7c0")); GridSpacingItemDecoration itemDecoration = new GridSpacingItemDecoration(this, 2);
itemDecoration.setH_spacing(50);
itemDecoration.setV_spacing(50);
// itemDecoration.setmDivider(mDivider); itemDecoration.setDividerColor(Color.parseColor("#008E00")); listWeChats.addItemDecoration(itemDecoration); listWeChats.addOnScrollListener(mOnScrollListener);
}
简析:GridSpacingItemDecoration 用于为列表添加分割线。具体的使用可参加项目的示例。
3. 实现带有HeaderView的垂直列表
private void initView() { listWeChats = (RecyclerView) findViewById(R.id.listWeChats); mDatas = new ArrayList<>(); WeChatListAdapter weChatListAdapter = new WeChatListAdapter(this, mDatas, onClickListener);
HeaderAndFooterRecyclerViewAdapter recyclerViewAdapter = new HeaderAndFooterRecyclerViewAdapter(weChatListAdapter); listWeChats.setAdapter(recyclerViewAdapter); listWeChats.setLayoutManager(new LinearLayoutManager(this)); listWeChats.addItemDecoration(
new HorizontalDividerItemDecoration.Builder(WChatListHeaderAndFooterActivity.this)
.colorResId(R.color.list_divider_color)
// .color(Color.parseColor("#FF0000"))
.sizeResId(R.dimen.list_divider_height)
.marginResId(R.dimen.list_divider_left_margin, R.dimen.list_divider_right_margin)
.build(true)); listWeChats.addOnScrollListener(mOnScrollListener); RecyclerViewUtils.setHeaderView(listWeChats, new SampleHeader(this));
}
简析:RecyclerViewUtils,可以很方便的为RecyclerView添加HeaderView。
4. 实现带有HeaderView的网格布局
private void initView() { listWeChats = (RecyclerView) findViewById(R.id.listWeChats); mDatas = new ArrayList<>(); WeChatListAdapter weChatListAdapter = new WeChatListAdapter(this, mDatas, onClickListener); HeaderAndFooterRecyclerViewAdapter recyclerViewAdapter = new HeaderAndFooterRecyclerViewAdapter(weChatListAdapter);
listWeChats.setAdapter(recyclerViewAdapter); GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
gridLayoutManager.setSpanSizeLookup(new HeaderSpanSizeLookup((HeaderAndFooterRecyclerViewAdapter) listWeChats.getAdapter(), gridLayoutManager.getSpanCount()));
listWeChats.setLayoutManager(gridLayoutManager); // Drawable mDivider = getResources().getDrawable(R.drawable.list_divider);
// ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#00c7c0")); GridSpacingItemDecoration itemDecoration = new GridSpacingItemDecoration(this, 2);
itemDecoration.setHasHeader(true);
itemDecoration.setH_spacing(50);
itemDecoration.setV_spacing(50);
// itemDecoration.setmDivider(mDivider); itemDecoration.setDividerColor(Color.parseColor("#008E00")); listWeChats.addItemDecoration(itemDecoration); listWeChats.addOnScrollListener(mOnScrollListener); RecyclerViewUtils.setHeaderView(listWeChats, new SampleHeader(this));
}
以上就是我整合使用的RecyclerView,挺顺手的,我已经在多个项目中使用它了,希望更多的人能喜欢支持它。
注: 项目代码已经更新了多次,如果对该项目感兴趣,请对着github上的项目介绍使用。
项目github地址:https://github.com/zuiwuyuan/RecycleView_PullToRefresh_LoadMore
如有疑问或建议,欢迎进QQ群讨论:487786925( Android研发村 )
Android 整合实现简单易用、功能强大的RecyclerView的更多相关文章
- 推荐一个高效,易用功能强大的可视化API管理平台
项目管理 提供基本的项目分组,项目管理,接口管理功能 接口管理 友好的接口文档,基于websocket的多人协作接口编辑功能和类postman测试工具,让多人协作成倍提升开发效率 MockServer ...
- android中实现简单的聊天功能
这个例子只是简单的实现了单机版的聊天功能,自己跟自己聊,啦啦~~ 主要还是展示RecyclerView控件的使用吧~ 参考我之前写的文章: android中RecyclerView控件的使用 andr ...
- jQuery简单易用的网页内容打印插件
简要教程 jQuery.print是一款简单易容且功能强大的网页内容打印jQuery插件.该网页打印插件可以打印指定区域的网页元素,可以指定跳过不打印某些元素,还可以打印整个页面内容.并且提供了丰富的 ...
- 简介:google ctemplate:简单易用的文字模板(转载)
转自:http://blog.csdn.net/aladdina/article/details/4531736 CTemplate 是一个简单实用.功能强大的文字模板(template langua ...
- SpringMVC整合Shiro,Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能
SpringMVC整合Shiro,Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能. 第一步:配置web.xml <!-- 配置Shiro过滤器,先让Shiro ...
- DataAccess通用数据库访问类,简单易用,功能强悍
以下是我编写的DataAccess通用数据库访问类,简单易用,支持:内联式创建多个参数.支持多事务提交.支持参数复用.支持更换数据库类型,希望能帮到大家,若需支持查出来后转换成实体,可以自行扩展dat ...
- 高效、易用、功能强大的 api 管理平台
前言导读 实际环境的需求可以说是:只有你没想到,没有实现不了的,征对于目前实际开发.测试.生产等环境中,需要用到各类的接口可达几十.甚至上百个,因此,必须需要一个统一管理的工具平台来统一管理这类接口, ...
- Lingoes 一款功能强大、简明易用的多语言词典和文本翻译软件
Lingoes 软件自述 Lingoes 是一款功能强大.简明易用的多语言词典和文本翻译软件,支持多达80种语言互查互译,这些语言包括 英.法.德.意.俄.中.日.韩.西.葡.阿拉伯语 及更多... ...
- 功能强大的图片截取修剪神器:Android SimpleCropView及其实例代码重用简析(转)
功能强大的图片截取修剪神器:Android SimpleCropView及其实例代码重用简析 SimpleCropView是github上第一个第三方开源的图片修剪截取利器,功能强大,设计良好.我个人 ...
随机推荐
- nginx的四个基本功能
Nginx能做什么 1.反向代理2.负载均衡3.HTTP服务器(包含动静分离)4.正向代理 以上就是做网站小编了解到的Nginx在不依赖第三方模块能处理的事情,下面详细说明每种功能怎么做 1.反向代理 ...
- 【Scala学习笔记】一、函数式编程的思想
1. 函数是头等值. 在函数编程中,函数也是值,与整数和字符串处于同一地位.函数可以像变量一样被创建,修改,并当成变量一样传递,返回或是在函数中嵌套函数. 函数可以当做参数传递给其他函数. ...
- CesiumLab V1.3 新功能 MAX场景处理(免费Cesium处理工具集)
每次到写文章的时候就很高兴,意味着又有重大功能更新了,也意味着10多天昏天黑地的闭关日子暂时结束了. 依照惯例,先放图 小范围精模型cesium加载效果 大范围白模cesium加载效果 ...
- oracle使用dblink跨库查询的例子
本文介绍了oracle数据库使用dblink进行跨库查询的方法,oracle dblink跨库查询教程,需要的朋友参考下. oracle dblink跨库查询 方法一:首先,创建数据库链接: 复制 ...
- java利用JXL导出/生成 EXCEL【my】
一.创建一个excel文件 package test;// 生成Excel的类 import java.io.File; import jxl.Workbook;import jxl.write.La ...
- c++控制内存分配
为了满足应用程序对内存分配的特殊需求,C++允许重载new运算符和delete运算符控制内存分配,通过定位new表达式初始化对象(好处是可以在某些场景下避免重新内存分配的消耗) 1.operate n ...
- day37 05-HIbernate二级缓存:一级缓存更新同步到二级缓存及二级缓存配置文件
一级缓存的更新会自动同步到二级缓存. @SuppressWarnings("all") @Test // 将内存中的数据写到硬盘 public void demo7(){ Sess ...
- 2019-4-16-C#-在-8.0-对比-string-和-string_-的类型
title author date CreateTime categories C# 在 8.0 对比 string 和 string? 的类型 lindexi 2019-04-16 10:16:56 ...
- Vue Router 相关
1. 路由传参: 编程式的导航 router.push this.$router.push("home"); this.$router.push({ name: 'news', p ...
- excel一些常用的函数
函数分类: 关联匹配类 清洗处理类 逻辑运算类 计算统计类 时间序列类 一.关联匹配类 经常性的,需要的数据不在同一个excel表或同一个excel表不同sheet中,数据太多,copy麻烦也不准确, ...