BaseRecyclerViewAdapterHelper 上拉加载过程产生的问题

本周自己写了个框架:ViewPager+Fragment+SwipeRefreshLayout+RecyclerView加载数据,以达到导航切换页面的同时可以水平滑动切换页面(共三个页面),很常见的导航切换布局。
因为要做到当前页面显示时方去加载数据,重写了fragment的setUserVisibleHint方法,在其内部做数据初始化等操作。部分代码如下:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
   super.setUserVisibleHint(isVisibleToUser);
   if (getUserVisibleHint()) {
       initVisible();
   }
}
private boolean hasGetData = false;
protected void initVisible() {
   //当前页面可见的时候才将要展示的列表视图解析到容器布局里
   if (!hasGetData) {
      hasGetData = true;
      child=act.getLayoutInflater().inflate(R.layout
          .fragment_replenish_model, flContainer);
      initView();
      initData();
      initListener();
   }
}

注意:ViewPager第一个加载的页面是不做这些处理的,因为setUserVisibleHint方法是先于onCreateView这些生命周期的方法执行,刚进入页面时候如果直接走setUserVisibleHint方法来做数据处理是会产生很多麻烦的。这里只针对后续加载页面做的抽取。同时,ViewPager设置预加载页面个数为n-1(n为页面总个数,我这里是3个页面):vp.setOffscreenPageLimit(2);


接下来就是问题了:
*项目关于数据刷新及加载更多使用RecyclerView配套的BaseRecyclerViewAdapterHelper框架,然后在数据上拉加载更多时候就产生了*cannot call this method while RecyclerView is computing a layout or scrolling 异常问题。
这个问题同时出现在首次上拉及没有更多数据添加尾部局时候。
解决答案参考https://github.com/CymChad/BaseRecyclerViewAdapterHelper/issues/763

部分参考代码如下:

    //这里是上拉加载更多数据回调的方法部分参考代码
    @Override
    public void updateAdapter(final List data) {
        recycler.post(new Runnable() {
            @Override
            public void run() {
                adapter.addData(data);
            }
        });
    }
    //这里是没有更多数据时候添加尾部局部分参考代码
    @Override
    public void setNoDataView() {
        recycler.post(new Runnable() {
            @Override
            public void run() {
                adapter.loadComplete();
                View noDataView = act.getLayoutInflater().inflate(R.layout.footer_nomore_data,
                        (ViewGroup) recycler.getParent(), false);
                adapter.addFooterView(noDataView);
            }
        });
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值