带有Scrapped或附加视图的GapWorker可能无法回收。 isScrap:false isAttached:true

时间:2016-12-31 11:56:05

标签: android android-recyclerview recycler-adapter android-viewholder

当我滚动我的recyclerview太快时,我得到了以下崩溃

 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.recycleView(RecyclerView.java:5603)
                                                                 at android.support.v7.widget.GapWorker.prefetchPositionWithDeadline(GapWorker.java:277)
                                                                 at android.support.v7.widget.GapWorker.flushTaskWithDeadline(GapWorker.java:324)
                                                                 at android.support.v7.widget.GapWorker.flushTasksWithDeadline(GapWorker.java:337)
                                                                 at android.support.v7.widget.GapWorker.prefetch(GapWorker.java:344)
                                                                 at android.support.v7.widget.GapWorker.run(GapWorker.java:370)
                                                                 at android.os.Handler.handleCallback(Handler.java:739)
                                                                 at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                 at android.os.Looper.loop(Looper.java:148)
                                                                 at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

我已经尝试了我的所有努力,并在stackoverflow上得到了类似的问题,但没有一个像下面的链接那样有用,

Link 1

Link 2

Link 3

Link 4

Link 5

我不知道发生这种情况的崩溃。任何帮助将不胜感激。我既不使用" android:animateLayoutChanges =" true"

基本上我曾尝试合并这两个不同的GitHub项目,

rv-adapter-states

rv-adapter-endless

我的文件链接如下所示,来自pastbin,

Row Layout

Code of recyclerview

My Adapter merge from two diffrent adapter of rv

Main adapter

3 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,我不知道为什么会这样。

我解决了删除recyclerview上的android:animateLayoutChanges并为我添加的recyclelerview设置动画: recyclerView.setItemAnimator(new DefaultItemAnimator());

如果您想为其设置动画,请使用帐户添加方法public long getItemId(int position)并设置setHasStableIds(true)

答案 1 :(得分:1)

你试过layoutManager.setItemPrefetchEnabled(false);吗?它对我有用。

答案 2 :(得分:0)

就我而言,问题是由于此方法public long getItemId(int position)的执行不正确(从RecyclerView.Adapter方法覆盖)。

旧代码将为同一个项目获取两个不同的ID(在我的情况下,它是页脚项目),在修复实现后问题已经消失。