https://www.aliyun.com/jiaocheng/1025.html

1、如何导入到工程中

先在 工程的build.gradle(Project:XXXX) 的 repositories 添加:

allprojects { 
repositories { 
jcenter() 
maven { url "https://jitpack.io" } // 这句话是自己额外添加的 

}

在使用的mudle中添加:

compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'

也可以下载源码,复制有用的部分。

2、开启混淆

最好参照Git上使用:

#BRVAH
-keep class com.chad.library.adapter.** {
*;
}
-keep public class * extends com.chad.library.adapter.base.BaseQuickAdapter
-keep public class * extends com.chad.library.adapter.base.BaseViewHolder
-keepclassmembers public class * extends com.chad.library.adapter.base.BaseViewHolder {
           <init>(android.view.View);

}

(1)给item中添加点击事件,在这里需要完成添加,这样才能用 
helper.addOnClickListener(R.id.textView_my_name); 
helper.addOnLongClickListener(R.id.textView_my_name);

这里算是基础工作,想给那个控件添加点击|长点击都在这里添加

(2)helper.getLayoutPosition();

此方法是得到当前条目的位置

2.2关于数据源更新 
(1) myRecyclerAdapter.notifyDataSetChanged();

更新整个RecyclerView,根据新的List集合中数据来更新

(2)myRecyclerAdapter.addData(mList); 
/** 
* add new data to the end of mData 

* @param newData the new data collection 
*/ 
public void addData(@NonNull Collection<? extends T> newData) { 
mData.addAll(newData); 
notifyItemRangeInserted(mData.size() - newData.size() + getHeaderLayoutCount(), newData.size()); 
compatibilityDataSizeChanged(newData.size()); 
}

添加新的数据在原来的数据上,封装了notifyDataSetChanged,比如,界面展示数据10条,你调用了这个方法,可以使得界面上展示20条,相当于再次拼接上了。

(3)myRecyclerAdapter.setNewData(mList); 
/** 
* setting up a new instance to data; 

* @param data 
*/ 
public void setNewData(@Nullable List<T> data) { 
this.mData = data == null ? new ArrayList<T>() : data; 
if (mRequestLoadMoreListener != null) { 
mNextLoadEnable = true; 
mLoadMoreEnable = true; 
mLoading = false; 
mLoadMoreView.setLoadMoreStatus(LoadMoreView.STATUS_DEFAULT); 

mLastPosition = -1; 
notifyDataSetChanged(); 
}

取代原来的数据。并不会和上面一样拼接上。 也是对于notifyDataSetChanged的封装。

(4)总结

如果喜欢直接用NotifyDataSetChanged方法,那么注意mList要自己手动add,才能保存原来数据。
而(2)和(3)则是对于mList进行了操作,一般就是清空或者是继续添加。

(3)添加item上单独控件的点击事件 
myRecyclerAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() { 
@Override 
public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) { 
Log.d("xljnewstudy", "具体View短时间点击事件"); 
//注意:这里的前提是你在conver方法中添加了,如果 多个控件添加了,可以采用 
//switch(view.getId())方法来区分 

});

(4)特殊需求 
getViewByPosition(RecyclerView recyclerView, int position, @IdRes int viewId)

如果你想在点击事件中,获得其他的子控件的话。

4、给item 展示出来设置动画 
4.1 设置动画 
myRecyclerAdapter.openLoadAnimation(BaseQuickAdapter.SLIDEIN_LEFT); 
//这里采用的是给定好的动画,还有 
ALPHAIN (渐显)、SCALEIN (缩放)、SLIDEIN_BOTTOM 、SLIDEIN_LEFT 、SLIDEIN_RIGHT 、

4.2 
myRecyclerAdapter.setNotDoAnimationCount(-1); 
如果不设置这个属性,那么默认直接展示在用户面前那一屏上没有动画 
参数是自己填,填什么,表示从第几个item开始出来的动画,设置-1,默认都有动画

4.3 
myRecyclerAdapter.isFirstOnly(false); 
如果设置为true ,那么每个item只有一次执行动画机会,比如你滑出屏之后,再进来,就没有动画了

4.4 使用自己定义的动画 
myRecyclerAdapter.openLoadAnimation(new BaseAnimation() { 
@Override 
public Animator[] getAnimators(View view) { 
return new Animator[0]; 
//在这里写动画的代码 
}

});

5.1 添加头布局 
ImageView mImage = new ImageView(MainActivity.this); 
mImage.setBackgroundResource(R.mipmap.ic_launcher); 
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 500); 
mImage.setLayoutParams(params); 
myRecyclerAdapter.addHeaderView(mImage); //核心代码 
// myRecyclerAdapter.setHeaderViewAsFlow(true);//此属性说是占满一行,经过测试,暂时没有发现用处

如图所示,添加了一个头布局,如果你不设置一些属性的话,那么这个ImageView的高度只有item高度那么高
这个是默认的,

5.2 添加尾布局 
ImageView mi = new ImageView(MainActivity.this); 
mi.setBackgroundResource(R.mipmap.ic_launcher); 
myRecyclerAdapter.addFooterView(mi); //核心代码 
// myRecyclerAdapter.setFooterViewAsFlow(true);//此属性说是占满一行,经过测试,暂时没有发现用处

如图所示,如果添加了一个尾布局,但是默认只占有一个item的高度.

5.3 添加空布局 
ImageView ms = new ImageView(MainActivity.this); 
ms.setBackgroundResource(R.mipmap.ic_launcher); 
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(250, 250); 
params.addRule(RelativeLayout.CENTER_IN_PARENT); 
ms.setLayoutParams(params); 
myRecyclerAdapter.setEmptyView(ms);//可以添加一个view

如上,添加了一张图片,只是添加一个View,它会默认的填充在左上角,而且很小
不会按照你设置的属性来

myRecyclerAdapter.setEmptyView(R.layout.recyer_empty, mRecyclerView);

如上,是另一种方法,将你想要展示的界面以布局的形式添加,但是,如果不添加RecyclerView
就会报运行时错误。

5.4 一些说明

如果你只是这样设置了三个布局,那么在没有数据的时候,只会展示空白布局,但是有一些额外的需求
比如同时展示头、尾、空、之类的

myRecyclerAdapter.setHeaderAndEmpty(true); //让头布局和空布局一起展示 
myRecyclerAdapter.setHeaderFooterEmpty(true, true);//两个参数,前面是允许头和空,后面是允许尾和空

另外,你设置了头布局或者尾布局,在设置item点击事件的时候,根本不管用,你点击第一个item,依旧是
positon = 0 ;所以点击事件需要自己额外添加,就是说,把头布局和尾布局从内容区域分开了。

Recyclerview-BRVAH使用相关推荐

  1. BRVAH(让RecyclerView变得更高效) (3)

    本文来自网易云社区 作者:吴思博 3 实现列表加载动画效果    3.1默认动画 我们只需将自建的 adapter 继承它对应满足需求的 Adapter,然后在 Activity 中实例化,通过ope ...

  2. BRVAH的BaseRecyclerViewAdapterHelper与MVVM模式优雅结合,Recyclerview如何在Databinding中快捷、方便地使用(一)

    BRVAH的BaseRecyclerViewAdapterHelper与MVVM模式优雅结合(其二) BRVAH的BaseRecyclerViewAdapterHelper与MVVM模式优雅结合(其三 ...

  3. BRVAH的BaseRecyclerViewAdapterHelper与MVVM模式优雅结合,Recyclerview如何在Databinding中快捷、方便地使用(三)

    BRVAH的BaseRecyclerViewAdapterHelper与MVVM模式优雅结合(其一) BRVAH的BaseRecyclerViewAdapterHelper与MVVM模式优雅结合(其二 ...

  4. BRVAH的BaseRecyclerViewAdapterHelper与MVVM模式优雅结合,Recyclerview如何在Databinding中快捷、方便地使用(二)

    BRVAH的BaseRecyclerViewAdapterHelper与MVVM模式优雅结合(其一) BRVAH的BaseRecyclerViewAdapterHelper与MVVM模式优雅结合(其三 ...

  5. 搭配BRVAH高效使用RecyclerView

    学习目标 熟悉使用 BRVAH 解决对应各种 adapter 需求 概述 BRVAH 是 Github 上的一个很棒的开源项目,主要作用是帮助我们更加高效的使用 Recyclerview 控件,处理项 ...

  6. RecyclerView优秀文集

    来自:https://github.com/CymChad/CymChad.github.io RecyclerView优秀文集 收集RecyclerView优秀文章,持续更新欢迎提交pr,推荐sta ...

  7. android开源系统brvah,Android Jetpack之通用Adapter(Databinding+BRVAH)

    之前发过一个databinding版的通用adapter,能实现一般需求,不过功能比较简陋,实际开发中大家更倾向于使用BRVAH等功能丰富的第三方框架.现在给出一个基于BRVAH的databindin ...

  8. Android 活用RecyclerView分割线

    1.ItemDecoration简介 Recyclerview是我们日常开发中使用频率比较高的的控件,而其中的ItemDecoration作为布局装饰又能很方便的帮助我们定义分割线,列表排行效果以及设 ...

  9. BRVAH源码分析(1)

    前言 此文章由BRVAH开发者angels分享给大家,目的是为了让BRVAH的使用者不仅会使用,还懂其原理.这样表面上比较慢,实际这一切都是值得的,懂了原理出了问题可以快速解决问题.「慢慢来,比较快. ...

  10. Android RecyclerView多样式列表实践指南

    前言 在日常的开发中我们经常会在一个列表数据中展示多种样式. 比如一个新闻列表,顶部是一个焦点Banner,然后是展示文章列表,文章中间可能插入某个图片广告,底部是一个加载更多/没有更多数据的加载状态 ...

最新文章

  1. json 和 pickle
  2. Beginning C# Objects 读书笔记(一)
  3. Freemarker商品页面静态化
  4. hdu3694(四边形的费马点)
  5. 设计模式4-创建型模式-Prototype模式
  6. m.2接口和nvme区别_m.2 nvme和m.2有区别吗?
  7. c语言作业题整理,C语言考试模拟练习题
  8. 2020顶会指南:征稿截止时间、举办地、举办时间一览
  9. oracle date引入哪个包,oracle 索引字段包含date类型,使用spring jdbc更新时不走索引,而是走table access full的问题...
  10. php java openssl ras_php基于openssl的rsa加密解密示例
  11. Ubuntu Linux服务器安装JDK8
  12. 现在维吾尔语在计算机中发展,维吾尔语手写体在线计算机识别技术研究.doc
  13. C++对象数组的实例学习
  14. CruiseControl.Net+SVN+MSBuild 自动编译
  15. 2022-2027年中国洗发水行业市场全景评估及发展战略规划报告
  16. 001电机的分类:不骗你,如果你没读这篇文章,可能都不知道还有这种类型的电机!
  17. 丁磊力荐 网易卡搭编程构建国内首个开放生态
  18. 怎么制作书单视频?免费制作书单视频软件分享
  19. 微服务架构之服务调用
  20. oracle 数据库表的字段类型修改为clob类型报错及解决方法

热门文章

  1. java正则表达 替换_java正则表达式替换
  2. Windows AD域管理软件详解
  3. CI框架解决jsonp跨域的问题
  4. 如何拼局域网所有ip_查看局域网内所有ip
  5. JEB配合IDA神器逆向
  6. LintCode 交叉字符串
  7. 如何理解希尔伯特空间?
  8. java 登陆微信获取好友列表_微信api接口,触发推送微信好友列表及返回
  9. 宝塔linux面板mysql数据库误删恢复过程
  10. 2-思科防火墙:思科ASDM