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

来源:互联网 发布:淘宝wap流量是什么意思 编辑:程序博客网 时间:2024/06/16 11:42

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

@Overridepublic 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