RecyclerView-错误收集:当你刷新RecyclerView程序崩掉的时候(1)

来源:互联网 发布:su建模软件 编辑:程序博客网 时间:2024/05/22 10:43

报错信息

摸着后脑勺,一脸懵逼地看着Android Studio打印着下面这段日志:

 java.lang.IllegalArgumentException: Scrapped or attached views may not be recycled. isScrap:false isAttached:true                      at android.support.v7.widget.RecyclerView$Recycler.recycleViewHolderInternal(RecyclerView.java:5420)                      at android.support.v7.widget.RecyclerView$Recycler.quickRecycleScrapView(RecyclerView.java:5506)                      at android.support.v7.widget.RecyclerView$LayoutManager.removeAndRecycleScrapInt(RecyclerView.java:8023)                      at android.support.v7.widget.RecyclerView.dispatchLayoutStep3(RecyclerView.java:3447)                      at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3194)                      at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3627)                      at android.view.View.layout(View.java:16009)                      at android.view.ViewGroup.layout(ViewGroup.java:5181)                      at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1195)                      at android.view.View.layout(View.java:16009)                      at android.view.ViewGroup.layout(ViewGroup.java:5181)                      at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1795)                      at android.view.View.layout(View.java:16009)                      at android.view.ViewGroup.layout(ViewGroup.java:5181)                      at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:131)                      at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42)                      at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1367)                      at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:849)

后来百度发现原因是:
onRefresh方法里的数据清空应该放在请求数据成功后再清空!

 mRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {            @Override            public void onRefresh() {                contents.clear();                current_page = 1;                netData(current_page + "");                mRecyclerView.refreshComplete();            }            @Override            public void onLoadMore() {                current_page++;                netData(current_page + "");                mRecyclerView.loadMoreComplete();            }        });

其解决方法是:
将列表清空的方法放到获取到接口数据以后执行。

 @Override                    protected void requestBody(List<BillListEntity> data) {                            promptDialog.dismissImmediately();                        if (contents.size() != 0 && "1".equals(current_page) ) {//剔除重复加载第一页                            contents.clear();                        }