Android框架BRVAH使用指南
BRVAH(BaseRecyclerViewAdapterHelper)是一个强大并且灵活的RecyclerViewAdapter,集成了大部分列表常用需求解决方案。
1、框架引入
将JitPack存储库添加到您的构建文件中(项目根目录下build.gradle文件)
allprojects {repositories {...maven { url 'https://jitpack.io' }}
}
在 build.gradle(Module:app) 的 dependencies 添加依赖项:
dependencies {implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.10'
}
2、BaseQuickAdapter
BaseQuickAdapter<T, VH>
为最基本的类型,提供最基础的功能,所有子类都继承于此。T
为数据类型;VH
为ViewHolder
类型,如果不需要自定义,直接使用BaseViewHolder
即可。- 框架提供了一个基础
BaseViewHolder
,所有自定义的ViewHolder
都应该继承于此!
2.1、快速使用
BaseQuickAdapter<T, VH>
为最基础的类型,直接使用BaseQuickAdapter<T, VH>
即可简单快速实现一个Adapter
:
public class DemoAdapter extends BaseQuickAdapter<String, BaseViewHolder> {/*** 构造方法,此示例中,在实例化Adapter时就传入了一个List。* 如果后期设置数据,不需要传入初始List,直接调用 super(layoutResId); 即可*/public DemoAdapter(list List<String>) {super(R.layout.layout_demo, list);}/*** 在此方法中设置item数据*/@Overrideprotected void convert(@NotNull BaseViewHolder helper, @NotNull String item) {helper.setText(R.id.tweetName, "This is an Item, pos: " + (helper.getAdapterPosition() - getHeaderLayoutCount()));}
}
Activity
中设置:
DemoAdapter adapter = new DemoAdapter(new ArrayList<String>());
mRecyclerView.setAdapter(adapter);// 设置新的数据方法
adapter.setNewData(list)
2.2、纯View创建Item
如果不想使用xml布局,想直接使用View代码方式创建,那么构造函数使用super(0)
,并且在Adapter
中重写onCreateDefViewHolder
方法:
public class DemoAdapter extends BaseQuickAdapter<String, BaseViewHolder> {public DemoAdapter(list List<String>) {//布局传递0super(0);}/*** 重写此方法,自己创建 View 用来构建 ViewHolder*/@NotNull@Overrideprotected BaseViewHolder onCreateDefViewHolder(@NotNull ViewGroup parent, int viewType) {// 创建自己的布局FrameLayout layout = new FrameLayout(getContext());......return createBaseViewHolder(layout);}@Overrideprotected void convert(@NotNull BaseViewHolder helper, @NotNull String item) {...}
}
2.3、点击事件
Item 点击事件:
DemoAdapter adapter = new DemoAdapter();// 设置点击事件
adapter.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(@NonNull BaseQuickAdapter adapter, @NonNull View view, int position) {Tips.show("onItemClick " + position);}
});
Item 长按事件:
adapter.setOnItemLongClickListener(new OnItemLongClickListener() {@Overridepublic boolean onItemLongClick(@NonNull BaseQuickAdapter adapter, @NonNull View view, int position) {Tips.show("onItemLongClick " + position);return true;}
});
Item 内子View的点击事件:
注意,请不要在convert方法里注册控件id
// 先注册需要点击的子控件id(注意,请不要写在convert方法里)
adapter.addChildClickViewIds(R.id.btn, R.id.iv_num_add, R.id.item_click);
// 设置子控件点击监听
adapter.setOnItemChildClickListener(new OnItemChildClickListener() {@Overridepublic void onItemChildClick(@NonNull BaseQuickAdapter adapter, @NonNull View view, int position) {if (view.getId() == R.id.btn) {Tips.show("onItemChildClick " + position);}}
});
Item 内子View的长按事件:
注意,请不要在convert方法里注册控件id
// 先注册需要长按的子控件id(注意,请不要写在convert方法里)
adapter.addChildLongClickViewIds(R.id.btn, R.id.iv_num_add, R.id.item_click);
// 设置子控件长按监听
adapter.setOnItemChildLongClickListener(new OnItemChildLongClickListener() {@Overridepublic boolean onItemChildLongClick(@NonNull BaseQuickAdapter adapter, @NonNull View view, int position) {if (view.getId() == R.id.btn) {Tips.show("onItemChildLongClick " + position);}return true;}
});
2.4、BaseQuickAdapter主要属性、方法说明
Java | Kotlin | 说明 | |
---|---|---|---|
获取Context | getContext() | context | |
数据相关 | |||
获取Adapter中数据 | getData() | data | 只能get |
设置新的数据实例 | setNewData() | setNewData() | 将会替换List指针引用 |
添加数据 | addData() | addData() | |
移除数据 | remove() | remove() | |
改变某一位置的数据 | setData() | setData() | |
替换整个数据 | replaceData() | replaceData() | 不会更改原数据的引用 |
设置Diff数据(异步,推荐) | setDiffCallback() | setDiffCallback() | 配置数据差异化比较的Callback |
setDiffConfig() | setDiffConfig() | 更高程度的自定义化配置 | |
setDiffNewData(List) | setDiffNewData(List?) | 必须先设置setDiffCallback() 或者 setDiffConfig(),否则不生效 | |
设置Diff数据 | setDiffNewData(DiffResult, List) | setDiffNewData(DiffResult, List?) | 通过DiffResult设置数据,Adapter内部不关心Diff过程,只要结果。 |
空布局 | |||
设置空布局视图 | setEmptyView() | setEmptyView() | 仅当 data 为空时,才会显示 |
是否有空视图 | hasEmptyView() | hasEmptyView() | |
获取空视图 | getEmptyLayout() | getEmptyLayout() | |
是否使用空布局 | setUseEmpty() | isUseEmpty | |
头布局 | |||
添加头布局 | addHeaderView() | addHeaderView() | |
设置头布局 | setHeaderView() | setHeaderView() | |
是否有头布局 | hasHeaderLayout() | hasHeaderLayout() | |
移除头布局 | removeHeaderView() | removeHeaderView() | |
移除所有头布局 | removeAllHeaderView() | removeAllHeaderView() | |
脚布局 | |||
添加脚布局 | addFooterView() | addFooterView() | |
设置脚布局 | setFooterView() | setFooterView() | |
是否有脚布局 | hasFooterLayout() | hasFooterLayout() | |
移除脚布局 | removeFooterView() | removeFooterView() | |
移除所有脚布局 | removeAllFooterView() | removeAllFooterView() | |
布局其他属性 | |||
当显示空布局时,是否显示 头布局 | setHeaderWithEmptyEnable() | headerWithEmptyEnable | |
当显示空布局时,是否显示 脚布局 | setFooterWithEmptyEnable() | footerWithEmptyEnable | |
点击事件 | |||
item点击事件 | setOnItemClickListener() | 同java | |
item长按事件 | setOnItemLongClickListener | 同java | |
item子view的点击事件 | setOnItemChildClickListener | 同java | |
item子view的长按事件 | setOnItemChildLongClickListener | 同java | |
添加需要响应点击事件的子View id | addChildClickViewIds() | 同java | 添加以后,setOnItemChildClickListener才会响应 |
添加需要响应长按事件的子View id | getChildLongClickViewIds() | 同java | |
动画 | |||
是否打开动画 | setAnimationEnable() | animationEnable | 默认:false |
动画是否仅第一次执行 | setAnimationFirstOnly() | isAnimationFirstOnly | |
设置自定义动画 | setAdapterAnimation() | adapterAnimation | |
设置使用内置默认动画 | setAnimationWithDefault() | setAnimationWithDefault() | 参数为枚举 |
Android框架BRVAH使用指南相关推荐
- Android框架,复习指南
前言 近几年来,互联网行业变化非常大,除了龙头企业的更替,"裁员潮""失业潮"也不断掀起,尤其是对于年纪太大的程序员真的是不太友好.但是,根据数据统计表明,自2 ...
- 淘宝开源Android容器化框架Atlas开发者指南
Atlas 由阿里巴巴移动团队自研,以容器化思路解决大规模团队协作问题,实现并行开发.快速迭代和动态部署,适用于 Android 4.x 以上系统版本的大小型 App 开发. 该框架于2017年3月1 ...
- RecylerView快速使用BaseQuickAdapter(BRVAH使用指南)
本文转载于:https://www.jianshu.com/p/b343fcff51b0 感谢作者:陈宇明 官方网站:www.recyclerview.org BRVAH是一个强大的RecyclerA ...
- flutter 局部状态和全局状态区别_给 Android 开发者的 Flutter 指南
这篇文档旨在帮助 Android 开发者利用既有的 Android 知识来通过 Flutter 开发移动应用.如果你了解 Android 框架的基本知识,你就可以使用这篇文档作为 Flutter 开发 ...
- Android 开发工程师面试指南
原文链接:https://github.com/GeniusVJR/LearningNotes <Android 开发工程师面试指南 LearningNotes >,作者是知乎Androi ...
- flutter 局部状态和全局状态区别_Android 开发者遇到 5G、AI,写给 Android 开发者的 Flutter 指南
前言 Flutter 是 Google 用以帮助开发者在 iOS 和 Android 两个平台开发高质量原生 UI 的移动 SDK.Flutter 兼容现有的代码,免费并且开源,在全球开发者中广泛被 ...
- Android插件化开发指南——插件化技术简介
文章目录 1. 为什么需要插件化技术 2. 插件化技术的历史 3. 插件化实现思路 3.1 InfoQ:您在 GMTC 中的议题叫做<Android 插件化:从入门到放弃>,请问这个标题代 ...
- 《Android 开发工程师面试指南》
<Android 开发工程师面试指南> <Android 开发工程师面试指南 LearningNotes >,作者是知乎Android开发工程师陶程,由梁观全贡献部分.大家可以 ...
- Android插件化开发指南——实践之仿酷狗音乐首页
文章目录 1. 前言 2. 布局分析 3. 底部导航栏的实现 4. 顶部导航栏和ViewPager+Fragment的关联 1. 前言 在Android插件化开发指南--2.15 实现一个音乐播放器A ...
最新文章
- 求 1 到 n 的所有数的约数和
- [云炬创业管理笔记]第五章打磨最有效的商业模式测试3
- 关于线程池,那些你还不知道的事
- 多智能体连续行为空间问题求解——MADDPG
- 锐捷发布极简以太全光解决方案 打造“不一样”的全光网
- Vue 打包前需修改的配置,解决白屏问题
- dlib 怎么安装vs2017_VS2017+DLib_19.17详细配置教程
- 使用命令行搜索你的java 库
- oracle标准成本的维护,Oracle标准成本计算和平均成本计算比较
- 位掩码(BitMask)——介绍与使用
- linux配置web页面登录密码,在Linux下通过WEB认证方式上网
- Python自动化运行合成大西瓜|附小游戏地址
- 怎么更改苹果账户名称_苹果新品快来了,你真的学会如何找回你的Apple ID的密码了吗?...
- 手机进水声音变小怎么办
- 小米手机与HBuilder连接的问题解决
- Linux命令行下载大文件,下载Onedrive文件
- C# GDAL 数字图像处理Part10 自动配准/半自动配准
- 要点初见:从旅行青蛙开始的OpenCV3模板匹配功能探索
- 电路的网孔电流法建模 matlab,第3节 网孔电流法
- matlab视频工具箱下载,MATLAB robotics tools工具箱下载安装
热门文章
- APP推广精华方案:做好用户口碑营销!
- 印度来了,印度要去了
- 从git更新代码到本地
- 字节跳动面试全经历,大佬的世界原来是这个样子!
- Monaco Editor教程(四):设置或获取内容,并监听内容的改变
- 【泛函分析】 2 赋范线性空间
- 鸿蒙系统对谷歌有影响吗,任正非表示华为鸿蒙系统已经上网,这会对谷歌形成多大的影响吗?...
- 从0-1搭建交付型项目管理体系流程-- 项目启动篇【宝芝林5】
- 灯塔工厂数量全国最多!海尔领航中国智造数字转型
- Linux怎么运行两个小乌龟,linux安装并配置版本控制软件subversion(svn小乌龟)实战教程...