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

本文针对Android开发中RecyclerView出现的java.lang.IllegalArgumentException错误进行了解析。该异常源于在数据刷新时错误地清空了列表数据。文章提供了具体的代码示例及修正方法,建议将列表清空操作置于数据成功加载之后。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

报错信息

摸着后脑勺,一脸懵逼地看着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();
                        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨Army

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值