ByRecyclerView 是主要是为了解决XRecyclerView和BRVAH其中的问题而产生的RecyclerView开源库。
它其中的功能有:自带下拉刷新或结合SwipeRefreshLayout、触底加载更多、添加/移除多个HeaderView/FooterView、状态布局StateView、点击/长按事件、万能分割线、优化过的极简Adapter(databinding)等。
本库已经更新了15个版本了,发布了近四个月,现在的功能都是刚需,已满足基本的项目需求,后续会一直维护下去增加更多的功能。希望能帮助到之前和我同一境遇的人,还请大家多多支持。
GitHub地址: ByRecyclerView,欢迎Star
文章目录
很久之前一直用的是XRecyclerView
,此库可以进行下拉刷新和加载更多,但是有很多致命的问题,例如:
SwipeRefreshLayout
,会有滑动冲突问题。CoordinatorLayout
+ AppBarLayout
中使用(作者后期已经修复,但是由于项目是拷贝的所以不便更新维护)。为了解决上面的问题,我在项目中到处打补丁,但是治标不治本,导致我不得不选择新的RecyclerView库来满足我的业务需求。
于是看中了万众瞩目的BaseRecyclerViewAdapterHelper
,这个现有18.7k star的开源库。
BRVAH 几乎可以解决上面所有的问题,并且使用简单,我在公司新项目中使用了它,但是不久我就遇到了新的问题:
所见即所得
,不要乱替我执行动作行为。查看这位无奈的开发,项目里提的issue很多是关于这部分的。前两个应该是此库比较大的两个槽点,导致我使用起来还是不那么称心如意。当然此库绝大部分的功能都是好用的。
于是就有了ByRecyclerView
,它基本解决了上面的所有问题:
SwipeRefreshLayout
使用ByRecyclerView
与Adapter
分离,意味着开发者之前使用自定义的BaseAdapter
,会无缝衔接ByRecyclerView
,完全可替换XRecyclerView
,只需更换少量方法。databinding
的BaseBindingAdapter
(ListView的adapter也有)AndroidX
和Support
包引入ByRecyclerView | BRVAH | XRecyclerView | |
---|---|---|---|
下拉刷新布局 | 继承基类自定义布局 | 无 | 只能简单设置样式 |
SwipeRefreshLayout | 可配合使用 | 可配合使用 | 不能使用 |
加载更多布局 | 继承基类自定义布局 | 继承基类设置简单布局 | 继承基类自定义类 |
加载更多机制 | 不足一屏上拉加载,超过后触底加载 | 不足一屏即加载 | 触底加载 |
HeaderView | 多ViewType区别 | 同一个item | 多ViewType区别 |
FooterView | 同一个item | 同一个item | 不能添加 |
EmptyView | 可设置 | 可设置 | 不能设置 |
点击/长按事件 | 有 | 有 | 无 |
ByRecyclerView 是XRecyclerView的拓展,可完全替换XRecyclerView,对于BRVAH它的优势在于四点:
缺点是还没有BRVAH里的部分功能,比如分组adapter、DiffUtils、item扩展动画…后期会逐步完善。
下载试用
App-Demo(AndroidX版本)
刷新操作 | 设置状态布局 |
---|---|
多类型列表(线性/宫格/瀑布流) | 分割线(线性/宫格/瀑布流) |
---|---|
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
dependencies {
implementation 'com.github.youlookwhat:ByRecyclerView:1.0.9' // AndroidX版本引入
implementation "com.github.youlookwhat:ByRecyclerView:1.0.9-support" // support版本引入
}
<me.jingbin.library.ByRecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layoutManager="LinearLayoutManager"
tools:listitem="@layout/item_home" />
mAdapter = new OneTypeAdapter(list);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setAdapter(mAdapter);
public class OneTypeAdapter extends BaseRecyclerAdapter<String> {
public OneTypeAdapter(List<String> data) {
super(R.layout.item_main, data);
}
@Override
protected void bindView(BaseByViewHolder<String> holder, String bean, int position) {
holder.setText(R.id.view_bottom, bean);
}
}
mAdapter.setNewData(list); // 设置第一页数据
// 下拉刷新监听
mRecyclerView.setOnRefreshListener(new ByRecyclerView.OnRefreshListener() {
@Override
public void onRefresh() {
// 刷新完成
mRecyclerView.setRefreshing(false);
}
});
// 加载更多监听
mRecyclerView.setOnLoadMoreListener(new ByRecyclerView.OnLoadMoreListener() {
@Override
public void onLoadMore() {
mAdapter.addData(list); // 设置及刷新数据
mRecyclerView.loadMoreComplete(); // 加载更多完成
mRecyclerView.loadMoreEnd(); // 没有更多内容了
mRecyclerView.loadMoreFail(); // 加载更多失败
}
});
Wiki目录:
1 引入及极速设置
- 1.1 引入
- 1.2 极速设置
2 ByRecyclerView
- 2.1 使用自带下拉刷新
- 2.2 使用加载更多
- 2.3 添加item点击事件
- 2.4 添加item长按事件
- 2.5 addHeaderView(多type)
- 2.6 addFooterView
- 2.7 setStateView(多种状态)
- 2.8 设置不满一屏不加载
- 2.9 设置加载更多底部间距
- 2.10 自定义下拉刷新布局
- 2.11 自定义加载更多布局
- 2.12 添加子View的点击事件
- 2.13 添加子View的长按事件
3 Adapter
- 3.1 单类型列表
- 3.2 单类型列表(databinding)
- 3.3 多类型列表实现
4 ItemDecoration
- 4.1 给线性布局设置分割线
- 4.2 给宫格/瀑布流设置分割线
ByRecyclerView借鉴了XRecyclerView下拉刷新、加载更多逻辑;BaseViewHolder及FooterView部分借鉴了BaseRecyclerViewAdapterHelper的BaseHolder,非常感谢!
大家有任何问题可以直接提Issues,也可以加入到答疑群:831860628,我会第一时间帮助大家解决。如果此库帮助到了你,还请给个Star、Fork、Follow,非常感谢。