4

我使用23.1.1 RecyclerView,當刷卡刷新時開始,在這種情況下,當我滾動我的RecyclerView它會崩潰,並給我錯誤回收站視圖數組索引超出界限Incossitency錯誤,同時SwipetoRefresh和回收站滾動同時

這裏是我的錯誤日誌,

java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{39e0644b position=6 id=-1, oldPos=-1, pLpos:-1 no parent} 
at android.support.v7.widget.RecyclerView$Recycler.validateViewHolderForOffsetPosition(RecyclerView.java:4251) 
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4382) 
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4363) 
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961) 
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1370) 
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1333) 
at android.support.v7.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1161) 
at android.support.v7.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:1018) 
at android.support.v7.widget.RecyclerView.scrollByInternal(RecyclerView.java:1492) 
at android.support.v7.widget.RecyclerView.onTouchEvent(RecyclerView.java:2416) 
at android.view.View.dispatchTouchEvent(View.java:8476) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2401) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2092) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2407) 
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2369) 
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1719) 
at android.app.Activity.dispatchTouchEvent(Activity.java:2752) 
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60) 
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2330) 
at android.view.View.dispatchPointerEvent(View.java:8671) 
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4193) 
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4059) 
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3604) 
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:36 

當我使用刷卡刷新佈局這些錯誤僅發生。

在onBindViewHolder方法適配器我打電話了loadmore數據的事件時,最後一個項目可見

@Override 
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) { 


     if(position == data.size() -1 && data.size() >= AppConstants.LIST_PAGE_SIZE){ 

      EventBus.getDefault().postSticky(new LoadMoreDataEvent(getPageIndex())); 
     } 
} 

UPDATE:

後明確列表,當我試圖通知適配器我得到這個錯誤,這是回收站視圖中的一個錯誤。我只是清除列表並設置適配器null和它的工作。

list.clear(); 
mAdapter.notifyDataSetChanged(); 
+1

如果你想幫助我們需要你的代碼。 –

回答

2

您可能會在回收站視圖中發現錯誤。它已經張貼在這裏 - RecyclerView: Inconsistency detected. Invalid item position

的bug跟蹤,您可以檢查herehere

+0

謝謝,我會檢查。 –

+0

@androidnoobdev請回答這個:http://stackoverflow.com/questions/36434071/android-support-v4-widget-swiperefreshlayout-working-but-it-is-not-visible – 2016-04-05 18:36:30

+0

@HammadNasir你已經回答了還有什麼我可以做的。 – androidnoobdev

0

由於名單已經清除了也就會得到正確的位置上運行後臺任務的問題,所以當你清楚的循環圖當時notifydatasetchange之前不要使用它。使用此:中

mAdapter.notifyItemRangeInserted(0, YourArrayList.size()) 

代替

mAdapter.notifyDataSetChanged();