Android 程序开发Android技术知识Android开发

ByRecyclerView:只为改变BRVAH加载更多机制/a

2020-02-21  本文已影响0人  Jinbeen

ByRecyclerView 是主要是为了解决XRecyclerView和BRVAH其中的问题而产生的RecyclerView开源库。

它其中的功能有:自带下拉刷新或结合SwipeRefreshLayout、触底加载更多、添加/移除多个HeaderView/FooterView、状态布局StateView、点击/长按事件、万能分割线、优化过的极简Adapter(databinding)等。

本库已经更新了15个版本了,发布了近四个月,现在的功能都是刚需,已满足基本的项目需求,后续会一直维护下去增加更多的功能。希望能帮助到之前和我同一境遇的人,还请大家多多支持。

GitHub地址: ByRecyclerView,欢迎Star

文章目录

为什么有 ByRecyclerView?

1. 最早 XRecyclerView

很久之前一直用的是XRecyclerView,此库可以进行下拉刷新和加载更多,但是有很多致命的问题,例如:

为了解决上面的问题,我在项目中到处打补丁,但是治标不治本,导致我不得不选择新的RecyclerView库来满足我的业务需求。
于是看中了万众瞩目的BaseRecyclerViewAdapterHelper,这个现有18.7k star的开源库。

2. 选择 BaseRecyclerViewAdapterHelper

BRVAH 几乎可以解决上面所有的问题,并且使用简单,我在公司新项目中使用了它,但是不久我就遇到了新的问题:

前两个应该是此库比较大的两个槽点,导致我使用起来还是不那么称心如意。当然此库绝大部分的功能都是好用的。

3. 最终 ByRecyclerView

于是就有了ByRecyclerView,它基本解决了上面的所有问题:

与 BRVAH、XRecyclerView对比

ByRecyclerView BRVAH XRecyclerView
下拉刷新布局 继承基类自定义布局 只能简单设置样式
SwipeRefreshLayout 可配合使用 可配合使用 不能使用
加载更多布局 继承基类自定义布局 继承基类设置简单布局 继承基类自定义类
加载更多机制 不足一屏上拉加载,超过后触底加载 不足一屏即加载 触底加载
HeaderView 多ViewType区别 同一个item 多ViewType区别
FooterView 同一个item 同一个item 不能添加
EmptyView 可设置 可设置 不能设置
点击/长按事件

ByRecyclerView 是XRecyclerView的拓展,可完全替换XRecyclerView,对于BRVAH它的优势在于四点:

缺点是还没有BRVAH里的部分功能,比如分组adapter、DiffUtils、item扩展动画...后期会逐步完善。

具体功能

下载试用

App-Demo(AndroidX版本)

download

部分效果演示

刷新操作 设置状态布局
刷新操作 设置状态布局
多类型列表(线性/宫格/瀑布流) 分割线(线性/宫格/瀑布流)
多类型列表 分割线

使用文档

简单接入

1.dependencie引入

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版本引入
}

2.在XML布局中引用 ByRecyclerView

<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" />

3.代码设置

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:ByRecyclerView/wiki

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,非常感谢!

End

大家有任何问题可以直接提Issues,也可以加入到答疑群:831860628,我会第一时间帮助大家解决。如果此库帮助到了你,还请给个Star、Fork、Follow,非常感谢😁。


上一篇下一篇

猜你喜欢

热点阅读