报错信息
摸着后脑勺,一脸懵逼地看着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();
}