谷歌RecyclerView内部Bug

来源:互联网 发布:淘宝手机详情图片大小 编辑:程序博客网 时间:2024/06/06 05:33
 java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{2f6e1841 position=7 id=-1, oldPos=-1, pLpos:-1 no parent}                                                                      at android.support.v7.widget.RecyclerView$Recycler.validateViewHolderForOffsetPosition(RecyclerView.java:4855)                                                                      at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4986)                                                                      at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4967)                                                                      at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2029)                                                                      at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1414)                                                                      at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1377)                                                                      at android.support.v7.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1193)                                                                      at android.support.v7.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:1043)                                                                      at android.support.v7.widget.RecyclerView.scrollByInternal(RecyclerView.java:1596)                                                                      at android.support.v7.widget.RecyclerView.onTouchEvent(RecyclerView.java:2704)                                                                      at android.view.View.dispatchTouchEvent(View.java:8472)                                                                      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2411)                                                                      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2093)                                                                      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2417)                                                                      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)                                                                      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2417)                                                                      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)                                                                      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2417)                                                                      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)                                                                      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2417)                                                                      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)                                                                      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2417)                                                                      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)                                                                      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2417)                                                                      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)                                                                      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2417)                                                                      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)                                                                      at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2446)                                                                      at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1754)                                                                      at android.app.Activity.dispatchTouchEvent(Activity.java:2860)                                                                      at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:63)                                                                      at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2385)                                                                      at android.view.View.dispatchPointerEvent(View.java:8667)                                                                      at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4398)                                                                      at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4211)                                                                      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3744)                                                                      at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3807)                                                                      at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3763)                                                                      at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3890)                                                                      at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3771)                                                                      at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3947)                                                                      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3744)                                                                      at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3807)                                                                      at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3763)                                                                      at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3771)                                                                      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3744)                                                                      at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6117)                                                                      at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6091)


靠,刚开始我还以为我的代码写的有问题,最后一查看,靠,控件BUG,谷歌大牛弄出来的BUG;但仔细查看BUG日志,越界,是什么导致越界呢?其实就是在我们刷新数据时,clean了数据导致List与RecyclerView数据不一至,那怎么解决呢?

其实解决方案很简单,我看了网上一大堆什么禁止RecyclerView的滑动来解决它,我也相当的无语了。其实解决办法,就是等我们把数据请求回来时,把之前的数据clean就可以了!

原创粉丝点击