ByRecyclerView 是主要是为了解决XRecyclerView和BRVAH其中的问题而产生的RecyclerView开源库。java
它其中的功能有:自带下拉刷新或结合SwipeRefreshLayout、触底加载更多、添加/移除多个HeaderView/FooterView、状态布局StateView、点击/长按事件、万能分割线、优化过的极简Adapter(databinding)等。android
本库已经更新了16个版本了,发布了近四个月,如今的功能都是刚需,已知足基本的项目需求,后续会一直维护下去增长更多的功能。但愿能帮助到以前和我同一境遇的人,还请你们多多支持。git
GitHub地址: ByRecyclerView,欢迎Star
文章目录github
好久以前一直用的是XRecyclerView
,此库能够进行下拉刷新和加载更多,可是有不少致命的问题,例如:maven
SwipeRefreshLayout
,会有滑动冲突问题。CoordinatorLayout
+ AppBarLayout
中使用(做者后期已经修复,可是因为项目是拷贝的因此不便更新维护)。为了解决上面的问题,我在项目中处处打补丁,可是治标不治本,致使我不得不选择新的RecyclerView库来知足个人业务需求。
因而看中了万众瞩目的BaseRecyclerViewAdapterHelper
,这个现有18.7k star的开源库。ide
BRVAH 几乎能够解决上面全部的问题,而且使用简单,我在公司新项目中使用了它,可是不久我就遇到了新的问题:布局
1.addHeaderView()是在一个item中操做的,致使我不能顺利使用锚点(滑动时,经过定位第一个item的位置来更改指示器)。若是使用多类型item会复杂不少,我须要对数据实现对应的多类型接口来达到目的。优化
-动画
所见即所得
,不要乱替我执行动做行为。查看这位无奈的开发,项目里提的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扩展动画...后期会逐步完善。
下载试用
刷新操做 | 设置状态布局 |
---|---|
![]() |
![]() |
多类型列表(线性/宫格/瀑布流) | 分割线(线性/宫格/瀑布流) |
---|---|
![]() |
![]() |
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,很是感谢😁。