BaseQuickAdapter上拉加载功能实现

最近使用BaseQuickAdapter进行RecyclerView 的Adapter的数据绑定显示。
实现上拉加载与下拉刷新功能,遇到如下问题:
1、首先是实现下拉刷新、下拉加载的监听(xml布局就不贴出来了):
下拉刷新,上拉加载的监听
2、现在贴出来错误的处理方式:
这里写图片描述
不知道你们有没有遇到这种问题,我调用tradeListAdapter.loadMoreComplete();
最后显示结果总是会有重复的请求结果。最开始我以为是子线程调起请求导致的,就将请求放在了runOnUiThread里进行请求,结果也是一样;因为我用的OKHttp框架,回调是在子线程,所以我怀疑是不是这个原因导致的,所以在回调里也使用了runOnUiThread里刷新适配器,结果还是一样;
最后没办法,只能一步一步来分析代码了。
3、最后正确的刷新数据的方式:
@Override
public void onLoadMoreRequested() {
mRefreshLayout.setEnabled(false);
if (tradeListAdapter.getData().size() < PAGE_SIZE) {
tradeListAdapter.loadMoreEnd(true);
} else {
if (mCurrentCounter >= TOTAL_COUNTER) { //判断mCurrentCounter是否大于总数
// pullToRefreshAdapter.loadMoreEnd();//default visible
tradeListAdapter.loadMoreEnd(mLoadMoreEndGone);//true is gone,false is visible
} else {
if (isErr) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
queryAll(mCurrentCounter, PAGE_SIZE, beginTime, endTime);
mCurrentCounter = tradeListAdapter.getItemCount();
tradeListAdapter.loadMoreComplete();
}
}, 1000);//一秒刷新
} else {
isErr = true;
tradeListAdapter.loadMoreFail();

            }
        }
        mRefreshLayout.setEnabled(true);
    }
}

4、原因就是出在这里了。使用new Handler().postDeloy(),成功解决该问题。
具体原理没大弄明白,但是从结果推测出:调用adapter.loadMoreComplete,刷新太快,mCurrentCount没取到相应的值,导致请求的offset (后台发起请求的偏移量,从第几条开始请求数据)不正确,所以会返回的结果是重复的。
研究不深,可能表述有些问题,敬请指点。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值