BRVAH(让RecyclerView变得更高效)(1)
本文来自网易云社区
作者:吴思博
对于RecyclerView, 我们重复编写着那一个又一个的列表界面,有的要分组,有的要添加广告头部、有的要不同类型item排列、等等需求,主要代码有大部分是重复的,如果有一个框架能够帮快速的解决各种需求,那该多好。
BRVAH是GitHub上一个强大的RecyclerAdapter框架,它能节约开发者大量的开发时间,它集成了大部分列表常用需求解决方案。 该框架于2016年4月10号发布,至今,经历了700多次迭代。
presentation by 吴思博
github:https://github.com/CymChad/BaseRecyclerViewAdapterHelper
official website:www.recyclerview.org
Author(Brvah) blog:http://www.jianshu.com/u/f958e66439f0
它能干吗?
解放你的双手,让你少码代码!
列表、子布局
一行代码轻松切换5种动画
让你感觉又回到ListView时代!
哼、列表需求来呀!
它带来了什么好处?
提高效率
BRVAH 是 Github 上的一个很棒的开源项目,主要作用是帮助我们更加高效的使用 Recyclerview 控件,处理项目中常见需求的 Adapter,使用起来非常方便。
BRVAH 主要是针对 Adapter 来设计的,为我们提供了一般情况下的BaseQuickAdapter,和几个特定需求下的Adapter,BaseMultiItemQuickAdapter用于复杂类布局列表;BaseItemDraggableAdapter 用于拖拽移动和滑动删除类列表; BaseSectionQuickAdapter用于带 Section 头部 View 的列表。
一、框架引入:
二、基本使用
Activity代码:(和普通的一样)
正常的adapter写法:
onCreateViewHolder(这个方法主要生成为每个Item inflater出一个View,方法返回的是一个ViewHolder。 方法是把View直接封装在ViewHolder中,然后我们面向的是ViewHolder这个实例,这个ViewHolder需要我们自己去编写。直接省去了当初Listview的convertView.setTag(holder)和convertView.getTag()这些繁琐的步骤。)和onBindViewHolder(这个方法主要用于适配渲染数据到View中。方法提供给你了一个viewHolder,而不是原来的convertView)等方法。
使用BRAVH的 Adapter:
首先需要继承BaseQuickAdapter,然后BaseQuickAdapter<T, BaseViewHolder> 中第一个泛型T是数据实体类型,第二个BaseViewHolder是ViewHolder,其目的是为了支持扩展ViewHolder。
可以通过viewHolder.getView(viewId)获取该控件。 通过viewHolder.getLayoutPosition() 获取当前item的position。(为什么有数据不显示?检查一下的RecyclerView是否设置了LayoutManager。)
代码量是3:1的比例!
和原始的adapter相对,减少了70%的代码量。
实现思路:
找到重复部分代码,抽取到基类,非重复部分用抽象方法代替,具体让子类实现。具体代码BaseQuickAdapter如下:(onCreateViewHolder方法和普通adapter一样,对onBindViewHolder方法进行了提取,使用抽象方法convert(抽象方法)代替。)
接下来再看看BaseViewHolder怎么写的:( 把ViewHolder进行了封装,利用了 SparseArray,加快了查找已创建好控件的速度,没有创建再使用findviewbyId再存入SparseArray)
三、强大的功能
1. 复杂布局实现(多布局)
在实际应用中经常会遇到各种样式的列表、宫格和列表同时存在、分类列表等情况。
1.1 多布局
在云阅读中的使用:“评论页面”( 优点: 代码量少,节省时间,简洁,清晰,易维护)
普通多布局写法:
getItemViewType方法,根据位置获取当前item的类型,在onCreateViewHolder 和 onBindViewHolder中匹配类型进行操作。
BRAVH是怎么实现?
1、实体类(UserComment)实现MultiItemEntity接口,在设置数据的时候,给每一个数据设置itemType。
评论的实体类:
2、adapter继承BaseMultiItemQuickAdapter类,在构造方法中调用addItemType()方法加入定义的 itemType 和对应布局, 在 Activity 中实例化即可。
和原始的adapter相对,减少70%的代码量,更加清晰易于维护。
原理分析:
网易云免费体验馆,0成本体验20+款云产品!
更多网易研发、产品、运营经验分享请访问网易云社区。
相关文章:
【推荐】 SpringBoot入门(一)——开箱即用
BRVAH(让RecyclerView变得更高效)(1)的更多相关文章
- BRVAH(让RecyclerView变得更高效) (3)
本文来自网易云社区 作者:吴思博 3 实现列表加载动画效果 3.1默认动画 我们只需将自建的 adapter 继承它对应满足需求的 Adapter,然后在 Activity 中实例化,通过ope ...
- BRVAH(让RecyclerView变得更高效) (2)
本文来自网易云社区 作者:吴思博 1.2 宫格和列表的混排样式 关于 Grid 和List 的混排样式,Grid 样式是一行有多个,而 List样式是一行只有一个. 我们可以把 List 样式看成是G ...
- K2 BPM_当BPM遇上RPA | 企业合规和风险管理从此更高效_全球领先的工作流引擎
强化企业合规与风险管理已成为全球企业发展的共识,尤其是对于药企.银行.地产这类对于合规性要求高的企业而言,识别预测潜在的管理风险和遵循不断升级的合规义务,是保证企业平稳运行的关键. 如何从流程层面降低 ...
- 如何更高效地定制你的bootstrap
bootstrap已经作为前端开发必不可少的框架之一,应用bootstrap使得我们对布局.样式的设定变得非常简单.但bootstrap提供的默认样式往往不能满足我们的需求,从而定制化bootstra ...
- SQL 正则表达式使模式匹配和数据提取变得更容易
SQL Server 2005 正则表达式使模式匹配和数据提取变得更容易 David Banister 本文讨论: 使用正则表达式进行高效的 SQL 查询 SQL Server 2005 对正则表达式 ...
- 如何使代码审查更高效【摘自InfoQ】
代码审查者在审查代码时有非常多的东西需要关注.一个团队需要明确对于自己的项目哪些点是重要的,并不断在审查中就这些点进行检查. 人工审查代码是十分昂贵的,因此尽可能地使用自动化方式进行审查,如:代码 ...
- 25个让Java程序员更高效的Eclipse插件
Eclipse提供了一个可扩展插件的开发系统.这就使得Eclipse在运行系统之上可以实现各种功能.这些插件也不同于其他的应用(插件的功能是最难用代码实现的).拥有合适的Eclipse插件是非常重要的 ...
- TED:如何掌控你的自由时间以及让自己变得更好,这样就能看到爱情应有的样子
TED:如何掌控你的自由时间以及让自己变得更好,这样就能看到爱情应有的样子 一.<如何掌控你的自由时间> (1)时间管理的传统思维:守时和节省零散的时间.演讲者认为这个观点已经彻底落后. ...
- 更强、更稳、更高效:解读 etcd 技术升级的三驾马车
点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 陈星宇(宇慕 ...
随机推荐
- D. Anton and Chess 模拟题 + 读题
http://codeforces.com/contest/734/problem/D 一开始的时候看不懂题目,以为象是中国象棋那样走,然后看不懂样例. 原来是走对角线的,长知识了. 所以我们就知道, ...
- 响应式Spring Cloud初探
响应式Spring Cloud初探 分类:工程原文链接:The Road to Reactive Spring Cloud作者: JOSH LONG译者: helloworldtang日期:JUNE ...
- INSERT ... ON DUPLICATE KEY UPDATE产生death lock死锁原理
前言 编辑 我们在实际业务场景中,经常会有一个这样的需求,插入某条记录,如果已经存在了则更新它如果更新日期或者某些列上的累加操作等,我们肯定会想到使用INSERT ... ON DUPLICATE K ...
- .Net魔兽登录页面
一,页面部分展示 二.代码展示 1.登录页面: public partial class FrmLogin : Form { public FrmLogin() { InitializeCompone ...
- Java编程简介
作者:CHAITANYA SINGH 来源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=3 JAVA由Sun Microsystems In ...
- Springboot2.X集成Quartz集群
为什么要使用Quzrtz集群 在项目进行集群部署时,如果业务在执行中存在互斥关系,没有对定时任务进行统一管理,就会引起业务的多次执行,不能满足业务要求.这时就需要对任务进行管理,要保证一笔业务在所有的 ...
- Java编程基础-反射
一.java反射 1.反射:动态获取类的信息,以及动态调用对象的方法的功能.可以理解为动态看透类的能力. 2.主要功能:在运行时判断任意一个对象所属的类:在运行时构造任意一个类的对象:在运行时判断任意 ...
- 关于IE兼容的问题
以下内容,均来自不同的网站,非本人原创,只是收集一下放在一起! =============================== [一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10 ...
- uvm.sv——UVM之道
文件: $UVM_HOME/src/uvm.sv 类: 无 `include "uvm_pkg.sv" Thus spake the UVM master programm ...
- js 字符串常用操作
function Class_String_Common(){ //将字符串 myString 的 start位置 和 end位置 之间的内容替换为 replaceStr this.replace1 ...