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 的列表。


一、框架引入:

b120a1a2-c121-4e80-95bc-c05c24b4a973

二、基本使用

Activity代码:(和普通的一样)

cf050596-5d08-4356-b642-1a81050e6b82

正常的adapter写法:

onCreateViewHolder(这个方法主要生成为每个Item inflater出一个View,方法返回的是一个ViewHolder。 方法是把View直接封装在ViewHolder中,然后我们面向的是ViewHolder这个实例,这个ViewHolder需要我们自己去编写。直接省去了当初Listview的convertView.setTag(holder)和convertView.getTag()这些繁琐的步骤。)和onBindViewHolder(这个方法主要用于适配渲染数据到View中。方法提供给你了一个viewHolder,而不是原来的convertView)等方法。

2375df17-e4bb-4370-851a-042883b1554b

使用BRAVH的 Adapter:

首先需要继承BaseQuickAdapter,然后BaseQuickAdapter<T, BaseViewHolder> 中第一个泛型T是数据实体类型,第二个BaseViewHolder是ViewHolder,其目的是为了支持扩展ViewHolder。

6efbcac2-662e-44c9-8c60-de9dea52b9f4

可以通过viewHolder.getView(viewId)获取该控件。 通过viewHolder.getLayoutPosition() 获取当前item的position。(为什么有数据不显示?检查一下的RecyclerView是否设置了LayoutManager。)

代码量是3:1的比例!                                          

和原始的adapter相对,减少了70%的代码量。                      

实现思路:

找到重复部分代码,抽取到基类,非重复部分用抽象方法代替,具体让子类实现。具体代码BaseQuickAdapter如下:(onCreateViewHolder方法和普通adapter一样,对onBindViewHolder方法进行了提取,使用抽象方法convert(抽象方法)代替。)

9968d437-8f75-44f0-9551-1b54e0941e1d

接下来再看看BaseViewHolder怎么写的:( 把ViewHolder进行了封装,利用了 SparseArray,加快了查找已创建好控件的速度,没有创建再使用findviewbyId再存入SparseArray)

08fbeba8-f8fc-4de7-85d9-9477f311274e


b4c0e0d2-e15f-46ab-9f4f-11ec0ba8082d

 

 

三、强大的功能

1. 复杂布局实现(多布局)

在实际应用中经常会遇到各种样式的列表、宫格和列表同时存在、分类列表等情况。

 

1.1 多布局

    在云阅读中的使用:“评论页面”( 优点: 代码量少,节省时间,简洁,清晰,易维护)

22433a1f-fe87-4591-aefc-392a3428f0df

 

 普通多布局写法:

getItemViewType方法,根据位置获取当前item的类型,在onCreateViewHolder 和 onBindViewHolder中匹配类型进行操作。

48cf134f-7d66-4a4f-aefe-c10f4cffadc3

BRAVH是怎么实现?

1、实体类(UserComment)实现MultiItemEntity接口,在设置数据的时候,给每一个数据设置itemType。

c9b02883-c911-4df3-8419-8ac629a4da9d

评论的实体类:

3147b93c-e8e1-439e-84f0-9e26b1953146

2、adapter继承BaseMultiItemQuickAdapter类,在构造方法中调用addItemType()方法加入定义的 itemType 和对应布局, 在 Activity 中实例化即可。

37adcbb9-25b1-4599-9a2f-475a57b5dbcd

和原始的adapter相对,减少70%的代码量,更加清晰易于维护。

原理分析:

0d1747f2-b5b6-4287-88fb-70f9778e2fdc

663931fd-5403-434f-8450-fa36aded34be



网易云免费体验馆,0成本体验20+款云产品! 

更多网易研发、产品、运营经验分享请访问网易云社区。


相关文章:
【推荐】 知物由学|见招拆招,Android应用破解及防护秘籍
【推荐】 工信部公示网络安全示范项目 网易云易盾“自适应DDoS攻击深度检测和防御系统”入选

转载于:https://www.cnblogs.com/163yun/p/9729727.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyQt5菜单添加+事件+状态栏-7

1 from PyQt5.QtWidgets import QApplication,QMainWindow,QAction2 from PyQt5.QtGui import QIcon3 #demo_7:菜单添加action以及状态栏显示消息4 import sys5 class Example(QMainWindow):6 def __init__(self):7 self.app QApplication(sys.argv)8 sup…

git命令图片

转载于:https://www.cnblogs.com/duanwandao/p/9734074.html

解题: SDOI 2011 染色

题面 强行把序列问题通过树剖套在树上。。。算了算是回顾了一下树剖的思想。 每次树上跳的时候注意跳的同时维护当前拼出来的左右两条链的靠上的端点&#xff0c;然后拼起来的时候讨论一下拼接点&#xff0c;最后一下左右两边的端点都要考虑 1 #include<cstdio>2 #includ…

java.lang.OutOfMemoryError: PermGen space

使用Tomcat报java.lang.OutOfMemoryError: PermGen space错误时&#xff0c;这是tomcat的内存不够的原因&#xff0c;也就是tomcat的内存溢出。 这是我们只要在tomcat的配置下添加服务内存就可以了&#xff0c;添加内存方法&#xff0c;只要加入 -Xms256M -Xmx512M -XX:PermS…

怎么把jad反编译放到Eclipse中

可以在CSDN下载页上进行下载哦&#xff0c;免费的哦&#xff0c;不要积分。 http://download.csdn.net/detail/farxix/9838195 我们把下载下来的jad资源包解压出来&#xff0c;如下图&#xff1a; 首先&#xff1a; 然后&#xff1a; 打开eclipse进行设置&#xff0…

一些很有意思的JS现象

关于JS对象的 . 和 [] []除了属性名可以比 .天马行空以外(比如我们要添加一个为33-abc的属性&#xff0c;一定得用[]))&#xff0c;还有一个实际操作中的区别 Object.is的作用和两个奇特的现象 还记得isNaN的作用&#xff0c;但有时候我们就想直接比较两个数据&#xff0c;总不…

怎么查看eclipse的版本号

在电脑上找到你安装eclipse的路径&#xff0c;找到readme点击打开&#xff0c;如下图所示&#xff1a; 查看版本号&#xff1a;

Vue2.0 脚手架代码详解

参考作者&#xff1a;https://www.jianshu.com/p/2b661d01eaf8 只是为了方便个人学习。 来看一下脚手架创建后的项目目录 说明&#xff1a;在*.vue文件&#xff0c;template标签里写html代码&#xff0c;且template直接子级只能有一个标签。style标签里写样式&#xff0c;scrip…

如何使用多个端口访问tomcat

查端口号是否被占用 在cmd中使用 netstat -ano 命令&#xff1b; 处理端口号使用命令 taskkill /pid 1234 ( 8080指的是端口号对应的PID 号 ) 在使用tomcat服务器做为开发使用时&#xff0c;如果我们有多个项目要发布、启动时怎么办呢&#xff0c;在一个tomcat下添加多个项目…

win10 安装mysql 8.0.12

按照CSDN以及博客园的其他教程, 之前安装过几次都有或多或少的bug 主要安装步骤: 1.配置my.ini文件 2.管理员进入终端, 切换到.../bin目录下进行操作 3.指令操作: 1) mysqld --initialize --console              此指令正常情况下, 可以自动生成一项随机密码, 一…

查看端口占用情况

当tomcat被占用时&#xff0c;可以使用命令行来解决占用问题&#xff1b; 打开cmd 输入netstat -ano|findstr 7001 即可找到相应的pid号 7016 再使用taskkill /f /pid 7016 就可以去除占用端口号情况。

译:1. RabbitMQ Java Client 之 Hello World

这些教程介绍了使用RabbitMQ创建消息传递应用程序的基础知识。您需要安装RabbitMQ服务器才能完成教程 1. 打造第一个Hello World 程序 RabbitMQ是一个消息代理&#xff1a;它接受和转发消息。你可以把它想象成一个邮局&#xff1a;当你把你想要发布的邮件放在邮箱里时&#xff…

基于SpringBoot 2.0正式版的SpringCloud的微服务实战项目搭建

Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具&#xff0c;它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。 Spring Cloud包含…

structc 开源框架介绍

引言 - 一切才刚刚开始 structc 是 C 结构基础库. 简单可复用. structc - https://github.com/wangzhione/structc 之前也描述过几次 structc, 文字多代码风格少. 最近加班不多, 准备详细解说哈其思考初衷. 0.0 整体结构 structc ├── extern ├── LICENSE ├── Makefil…

CSS颜色

CSS的颜色可以通过以下方法指定&#xff1a; 十六进制颜色RGB颜色RGBA颜色HSL色彩HSLA颜色 十六进制颜色 指定一个十六进制的颜色其组成部分是&#xff1a;#RRGGBB&#xff0c;其中RR&#xff08;红色&#xff09;&#xff0c;GG&#xff08;绿色&#xff09;和BB&#xff08;蓝…

CAN总线(1)--初探(更新中)

前言&#xff1a; CAN总线可以控制可以使用Xilinx中IP核来直接实现&#xff0c;也可以使用专用的CAN芯片&#xff08;例如&#xff1a;SJA1000&#xff09;通过单片机和FPGA驱动控制来实现&#xff1b; 目前是使用控制器SJA1000来进行实现&#xff1b; CAN总线控制器-SJA1000 结…

如何给代码自动添加注释?

丰富的注释和良好的代码规范&#xff0c;对于代码的阅读性和可维护性起着至关重要的作用。几乎每个公司对这的要求还是比较严格的&#xff0c;往往会形成自己的一套编码规范。但是再实施过程中&#xff0c;如果全靠手动完成&#xff0c;不仅效率低下&#xff0c;还难以保证真正…

js第一天

1.JS介绍 全称叫JavaScript&#xff0c;但不是Java&#xff0c;js是一门前台语言&#xff0c;而Java是后台语言。 js的作者是布兰登.艾奇 前台语言&#xff1a;运行在客户端的 后台语言&#xff1a;跟数据库有关 2.JS可以干什么&#xff1f; 页面特效&#xff0c;开发页面游戏&…

Ubuntu 如何为 XMind 添加快速启动方式和图标

目录 Ubuntu 如何为 XMind 添加快速启动方式和图标Ubuntu 如何为 XMind 添加快速启动方式和图标 按照教程Ubuntu16.04LTS安装XMind8并创建运行图标进行Xmind安装 下载安装包打开~/Download文件夹&#xff0c;解压.zip压缩包&#xff0c;之后在解压的文件夹中打开终端&#xff0…

Luogu P4205 [NOI2005]智慧珠游戏

P4205 [NOI2005]智慧珠游戏 题意 题目描述 智慧珠游戏拼盘由一个三角形盘件和\(12\)个形态各异的零件组成。拼盘的盘 件如图\(1\)所示 对于由珠子构成的零件&#xff0c;可以放到盘件的任一位置&#xff0c;条件是能有地方放&#xff0c;且尺寸合适&#xff0c;所有的零件都允许…