GapWorker with Scrapped or attached views may not be recycled. isScrap:false isAttached:true

天涯浪子 提交于 2019-12-01 16:27:09

问题


When i scroll my recyclerview too fast i am getting the following crash

 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)

I had tried my every effort and get similar question on stackoverflow, but none of them were helpful like following links,

Link 1

Link 2

Link 3

Link 4

Link 5

I have no knowledge of this crash from where it is occurring. Any help would be greatly appreciated. I am neither using "android:animateLayoutChanges="true"

Basically i had tried to merge these two different GitHub project,

rv-adapter-states

rv-adapter-endless

My files links are as follows from pastbin,

Row Layout

Code of recyclerview

My Adapter merge from two diffrent adapter of rv

Main adapter


回答1:


I had the same problem and I don't know why is happening.

I solved it removing the android:animateLayoutChanges on the recyclerview and to animate the recyclerview I have added: recyclerView.setItemAnimator(new DefaultItemAnimator());

Take an account to add the method public long getItemId(int position) and set setHasStableIds(true) if you want animate it.




回答2:


Have you tried layoutManager.setItemPrefetchEnabled(false);? It worked for me.




回答3:


In my case the problem was because of the incorrect implementing of this method public long getItemId(int position) (overrided from RecyclerView.Adapter method).

The old code will get two different ids for the same item (in my case it is the footer item), after fixing the implementation the issue has gone.



来源:https://stackoverflow.com/questions/41408085/gapworker-with-scrapped-or-attached-views-may-not-be-recycled-isscrapfalse-isa

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!