huxq17 / XRefreshView

一个万能的android下拉上拉刷新的框架,完美支持recyclerview
1.7k stars 501 forks source link

在fragment+TabLayout+RecyclerView报了 Scrapped or attached views may not be recycled错误 #61

Open wenxushen opened 7 years ago

wenxushen commented 7 years ago

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:5659) at android.support.v7.widget.RecyclerView$Recycler.quickRecycleScrapView(RecyclerView.java:5766) at android.support.v7.widget.RecyclerView$LayoutManager.removeAndRecycleScrapInt(RecyclerView.java:8321) at android.support.v7.widget.RecyclerView.dispatchLayoutStep3(RecyclerView.java:3579) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3265) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3767) at android.view.View.layout(View.java:16112) at android.view.ViewGroup.layout(ViewGroup.java:5185) at com.andview.refreshview.XRefreshView.onLayout(XRefreshView.java:352) at android.view.View.layout(View.java:16112) at android.view.ViewGroup.layout(ViewGroup.java:5185) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1959) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1813) at android.widget.LinearLayout.onLayout(LinearLayout.java:1722) at android.view.View.layout(View.java:16112) at android.view.ViewGroup.layout(ViewGroup.java:5185) at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1795) at android.view.View.layout(View.java:16112) at android.view.ViewGroup.layout(ViewGroup.java:5185) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1959) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1813) at android.widget.LinearLayout.onLayout(LinearLayout.java:1722) at android.view.View.layout(View.java:16112) at android.view.ViewGroup.layout(ViewGroup.java:5185) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:639) at android.widget.FrameLayout.onLayout(FrameLayout.java:574) at android.view.View.layout(View.java:16112) at android.view.ViewGroup.layout(ViewGroup.java:5185) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1959) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1813) at android.widget.LinearLayout.onLayout(LinearLayout.java:1722) at android.view.View.layout(View.java:16112) at android.view.ViewGroup.layout(ViewGroup.java:5185) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:639) at android.widget.FrameLayout.onLayout(FrameLayout.java:574) at android.view.View.layout(View.java:16112) at android.view.ViewGroup.layout(ViewGroup.java:5185) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2525) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2217) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1314) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6673) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:800) at android.view.Choreographer.doCallbacks(Choreographer.java:603) at android.view.Choreographer.doFrame(Choreographer.java:572) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:786) at android.os.Handler.handleCallback(Handler.java:815) at android.os.Handler.dispatchMessage(Handler.java:104) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5847) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1010) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)

wenxushen commented 7 years ago

哥们,这个错误报得有点懵啊,该怎么解决啊,求指教

huxq17 commented 7 years ago

有例子么?发我看看

wenxushen commented 7 years ago

fragment里的代码: oncreateView()里的 orderAllRecyClerView.setHasFixedSize(true); orderXrefreshview.setPinnedTime(1000); orderXrefreshview.setMoveForHorizontal(true); orderXrefreshview.setPullLoadEnable(true); orderXrefreshview.setAutoLoadMore(false); orderXrefreshview.enableReleaseToLoadMore(true); orderXrefreshview.enableRecyclerViewPullUp(true); orderXrefreshview.enablePullUpWhenLoadCompleted(true); orderAllRecyClerView.setLayoutManager(new CoustomLinearLayoutManager(getActivity())); orderAllAdapter=new OrderAllAdapter(getActivity(),orderAllList); orderAllRecyClerView.setAdapter(orderAllAdapter); orderAllAdapter.setCustomLoadMoreView(new XRefreshViewFooter(getActivity())); onResume()里的: orderXrefreshview.setXRefreshViewListener(new XRefreshView.SimpleXRefreshListener() {

        @Override
        public void onRefresh(boolean isPullDown) {
            getData(1); //获取数据
        }

        @Override
        public void onLoadMore(boolean isSilence) {
            pagesTemp++; 
            getData(pagesTemp);  //pagesTemp是页数
        }
    });
    orderXrefreshview.startRefresh();

getData()代码: public void getData(final int page){ if(page==1){ orderAllList.clear(); orderAllAdapter.clear(); } Retrofit retrofit=new Retrofit.Builder() .baseUrl(BaseUrl.BASEURL) .addConverterFactory(GsonConverterFactory.create()) .client(new OkHttpClient()) .build(); MyOrderService myOrderService=retrofit.create(MyOrderService.class); Call repos=myOrderService.getMyOrder(Integer.parseInt(SPUtil.get("userid",(long)-1).toString()),page,10); repos.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { Log.i("myorder", "onResponse: "+response.body().getResult()); if(page==1) { for (OrderBean orderbean : response.body().getResult()) { orderAllList.add(orderbean); } if(orderXrefreshview!=null) { orderXrefreshview.setLoadComplete(false); orderAllAdapter.notifyDataSetChanged(); orderXrefreshview.stopRefresh();

                if(orderAllList.size()>0) {
                    orderXrefreshview.setVisibility(View.VISIBLE);
                    orderEmptyRelativeLayout.setVisibility(View.GONE); 
                }else{
                    orderXrefreshview.setVisibility(View.GONE);
                    orderEmptyRelativeLayout.setVisibility(View.VISIBLE);
                }
                }
            }else {
                if (response.body().getResult().size() > 0) {
                    for (OrderBean orderbean : response.body().getResult()) {
                        orderAllList.add(orderbean);
                    }
                    orderXrefreshview.stopLoadMore(false);
                } else {
                    pagesTemp--;
                    orderXrefreshview.setLoadComplete(true);
                }
            }

        }

        @Override
        public void onFailure(Call<OrderMessageBean> call, Throwable t) {
            Log.i("orderall", "onFailure: "+t.getMessage());

            if(page==1) {
                if(orderXrefreshview!=null) {
                    orderXrefreshview.stopRefresh();
                    orderXrefreshview.setVisibility(View.GONE);
                    orderEmptyRelativeLayout.setVisibility(View.VISIBLE);
                }
            }else{
                orderXrefreshview.stopLoadMore(false);
            }

        }
    });

}

第一个fragment 跟第二个fragment有数据,第三个跟第四个没有数据 就是当我切换第一个frgment跟第二个时没有错误,但切换到第三个fragment的时候再切回第二个,就报了上面那个错误