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
就会报运行时错误。
如果你只是这样设置了三个布局,那么在没有数据的时候,只会展示空白布局,但是有一些额外的需求
比如同时展示头、尾、空、之类的
myRecyclerAdapter.setHeaderAndEmpty(true); //让头布局和空布局一起展示
myRecyclerAdapter.setHeaderFooterEmpty(true, true);//两个参数,前面是允许头和空,后面是允许尾和空
另外,你设置了头布局或者尾布局,在设置item点击事件的时候,根本不管用,你点击第一个item,依旧是
positon = 0 ;所以点击事件需要自己额外添加,就是说,把头布局和尾布局从内容区域分开了。