baseRecyclerViewAdapterHelper框架使用

baseRecyclerViewAdapterHelper框架使用

这个库本身存在上拉加载更多的多次的弊端,真正的解决为引入https://github.com/scwang90/SmartRefreshLayout 完成加载逻辑,如果您不想引入,那只能如下解决了

一、上拉加载更多

上拉加载更多一直有坑没有解决,就是第一次加载数据会回调加载跟多方法,其次是上拉过程中加载跟多会被回调多次

解决个方案

其实,仔细研读官方的方案会发现,在设置完成适配器之后应当默认调用, mAdapter.loadMoreEnd(true); mAdapter.loadMoreComplete(); ,亦或者是 serviceSeachAdapter.loadMoreFail(); 以此来最终完成整个加载动作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vFnEkT83-1577341867522)(https://i.imgur.com/T8t6w3J.png)]

完成的代码过程

1.设置开启加载更多

	serviceSeachAdapter.bindToRecyclerView(rvSurrounnding);
    serviceSeachAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
        @Override
        public void onLoadMoreRequested() {
                    currentPage += 1;
                    isLoadMore = true;
                    loadData();
        }
    },rvSurrounnding);

2.默认第一次加载会进入回调,如果不需要可以配置:

  serviceSeachAdapter.disableLoadMoreIfNotFullPage();

2.在数据请求的回调中设置本次完成的状态

serviceList = responsebody.getResult().getServiceList();

           if (isLoadMore) {
               isLoadMore = false;
               serviceSeachAdapter.addData(serviceList);

            } else {
               serviceSeachAdapter.setNewData(serviceList);
            }

            if (serviceList.size() < PAGE_COUNT) {
               serviceSeachAdapter.loadMoreEnd(true);
            }else{
               serviceSeachAdapter.loadMoreComplete();
           }

3.在error的回调中应当设置加载失败

serviceSeachAdapter.loadMoreFail()

参数说明

加载完成(注意不是加载结束,而是本次数据加载结束并且还有下页数据)

mQuickAdapter.loadMoreComplete();

加载失败

mQuickAdapter.loadMoreFail();

加载结束

mQuickAdapter.loadMoreEnd();

注意:如果上拉结束后,下拉刷新需要再次开启上拉监听,需要使用setNewData方法填充数据。

打开或关闭加载(一般用于下拉的时候做处理,因为上拉下拉不能同时操作)

mQuickAdapter.setEnableLoadMore(boolean);

预加载(这个功能屌炸天)

// 当列表滑动到倒数第N个Item的时候(默认是1)回调onLoadMoreRequested方法
mQuickAdapter.setPreLoadNumber(int);

设置自定义加载布局####

mQuickAdapter.setLoadMoreView(new CustomLoadMoreView()); 

代码如下

public final class CustomLoadMoreView extends LoadMoreView {

    @Override 
    public int getLayoutId() {
        return R.layout.view_load_more;
    }

    /**
     * 如果返回true,数据全部加载完毕后会隐藏加载更多
     * 如果返回false,数据全部加载完毕后会显示getLoadEndViewId()布局
     */
    @Override 
    public boolean isLoadEndGone() {
        return true;
    }

    @Override 
    protected int getLoadingViewId() {
        return R.id.load_more_loading_view;
    }

    @Override 
    protected int getLoadFailViewId() {
        return R.id.load_more_load_fail_view;
    }

    /**
     * isLoadEndGone()为true,可以返回0
     * isLoadEndGone()为false,不能返回0
     */
    @Override 
    protected int getLoadEndViewId() {
        return 0;
    }
}

xml文件




    

        

        
    

    


        

    


查看代码发现,BaseQuickAdapter 通过 bindToRecyclerView() 方法,绑定RecyclerView ———> 获取到layoutmanager———>监听条目填充变化——>判断是最后一个条目——>开启监听,(判断是不是loadmore状态和enableLoadMore,是通过mAdapter.loadMoreEnd(true); mAdapter.loadMoreComplete(); , serviceSeachAdapter.loadMoreFail(); 三个方法结束loadmore状态的)产生回调

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KMn8hbLP-1577341867523)(https://i.imgur.com/iSylRVx.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IAPuIhBF-1577341867523)(https://i.imgur.com/rJBJVQ2.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EfhimeZo-1577341867523)(https://i.imgur.com/0US8oEt.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mI7VT1D7-1577341867523)(https://i.imgur.com/WWoSnfH.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4YEVxabB-1577341867523)(https://i.imgur.com/VLykCGr.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JzhnSQ8C-1577341867524)(https://i.imgur.com/jAjW1Nu.png)]

这个流程分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r0n879QC-1577341867524)(https://i.imgur.com/uy8utBN.png)]

从设计中可以看出作者的设计相当用心,短短2000行代码完成了相当大的逻辑量,在这里感谢作者

感兴趣的小伙伴可以阅读作者的文章 https://www.jianshu.com/p/b343fcff51b0

参考: https://www.jianshu.com/p/1e20f301272e

你可能感兴趣的:(android学习积)