RecyclerView刷新异常java.lang.IndexOutOfBoundsException

使用RecyclerView下拉刷新发现异常崩溃,异常如下:

java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{13e04da position=8 id=-1, oldPos=-1, pLpos:-1 no parent}
                                                                at android.support.v7.widget.RecyclerView$Recycler.validateViewHolderForOffsetPosition(RecyclerView.java:5297)
                                                                at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5479)
                                                                at android.support.v7.widget.GapWorker.prefetchPositionWithDeadline(GapWorker.java:282)
                                                                at android.support.v7.widget.GapWorker.flushTaskWithDeadline(GapWorker.java:336)
                                                                at android.support.v7.widget.GapWorker.flushTasksWithDeadline(GapWorker.java:349)
                                                                at android.support.v7.widget.GapWorker.prefetch(GapWorker.java:356)
                                                                at android.support.v7.widget.GapWorker.run(GapWorker.java:387)
                                                                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)

问题分析

网上搜索解决方案大多说是adapter的list刷新数据后没有调用notirfyDataSetChanged()通知adapter,检查代码后发现果然有一处

adapter.getData().clear();

解决方案

更新list数据后及时调用notifyDataSetChanged方法

adapter.getData().clear();
adapter.notifyDataSetChanged();

猜你喜欢

转载自blog.csdn.net/weihua_li/article/details/78617297
今日推荐