一、前言:
1、一个强大并且灵活的RecyclerViewAdapter,欢迎使用。(喜欢的可以Star一下)
2、基于AndroidX的全新3.x版本现已发布beta版本,修复了众多的遗留问题,加强了对DataBinding的支持,多布局更加灵活。
3、如遇到问题,欢迎提交issus,旧版2.x不再进行新功能增加。
4、注意:从2.x升级到3.x为不完全兼容升级!
5、加载更多、向上加载、拖拽为模块,并不集成在某一个Adapter中,根据需要集成即可。
二、使用
1、将JitPack存储库添加到您的构建文件中(项目根目录下build.gradle文件)
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
2、添加依赖项
dependencies {
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4'
}
3、Adapter 的使用
4、多布局
8、LoadMoew
9、UpFetch编写中...
10、Draggable编写中...
三、BaseRecyclerViewAdapterHelper使用
1、说明
1、BaseQuickAdapter<T, VH>为最基本的类型,提供最基础的功能,所有子类都继承于此。
2、T为数据类型;VH为ViewHolder类型,如果不需要自定义,直接使用BaseViewHolder即可。
3、框架提供了一个基础BaseViewHolder,所有自定义的ViewHolder都应该继承于此!
2、快速使用
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数据
*/
@Override
protected 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)
3、纯View创建Item
如果不想使用xml布局,想直接使用View代码方式创建,那么构造函数使用super(0),并且在Adapter中重写onCreateDefViewHolder方法:
public class DemoAdapter extends BaseQuickAdapter<String, BaseViewHolder> {
public DemoAdapter(list List<String>) {
//布局传递0
super(0);
}
/**
* 重写此方法,自己创建 View 用来构建 ViewHolder
*/
@NotNull
@Override
protected BaseViewHolder onCreateDefViewHolder(@NotNull ViewGroup parent, int viewType) {
// 创建自己的布局
FrameLayout layout = new FrameLayout(getContext());
...
...
return createBaseViewHolder(layout);
}
@Override
protected void convert(@NotNull BaseViewHolder helper, @NotNull String item) {
...
}
}
4、BaseQuickAdapter 点击事件
tem 点击事件
DemoAdapter adapter = new DemoAdapter();
// 设置点击事件
adapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(@NonNull BaseQuickAdapter adapter, @NonNull View view, int position) {
Tips.show("onItemClick " + position);
}
});
Item 长按事件
adapter.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(@NonNull BaseQuickAdapter adapter, @NonNull View view, int position) {
Tips.show("onItemLongClick " + position);
return true;
}
});
Item 内子View的点击事件:
注意,请不要在convert方法里注册控件id
// 先注册需要长按的子控件id(注意,请不要写在convert方法里)
adapter.addChildLongClickViewIds(R.id.btn, R.id.iv_num_add, R.id.item_click);
// 设置子控件长按监听
adapter.setOnItemChildLongClickListener(new OnItemChildLongClickListener() {
@Override
public boolean onItemChildLongClick(@NonNull BaseQuickAdapter adapter, @NonNull View view, int position) {
if (view.getId() == R.id.btn) {
Tips.show("onItemChildLongClick " + position);
}
return true;
}
});
5、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() | 参数为枚举 |
参考:https://github.com/CymChad/BaseRecyclerViewAdapterHelper/blob/master/readme/1-BaseQuickAdapter.md
网友评论