RecyclerView内部报错,刷新崩溃RecyclerView Bug:IndexOutOfBoundsException: Inconsistency detected. Invalid item position …

RecyclerView Bug:IndexOutOfBoundsException: Inconsistency detected. Invalid item position …
重现的方法是:使用 RecyclerView加官方下拉刷新的时候,如果绑定的 List 对象在更新数据之前进行了 clear,而这时用户紧接着迅速上滑 RV,就会造成崩溃,而且异常不会报到你的代码上,属于RV内部错误。
就是在刷新,也就是 clear 的同时,让 RecyclerView 暂时不能够滑动,之后再允许滑动即可。代码就是在 RecyclerView 初始化的时候加上是否在刷新进而拦截手势:(http://www.liuhaihua.cn/archives/38762.html)

 mRecyclerView.setOnTouchListener(  new View.OnTouchListener() {  
  @Override  
  public boolean onTouch(View v, MotionEvent event) {   
    if (mIsRefreshing) { 
      return true;  
   } else {   
      return false;   
    }
  }
 });

然后去改变和恢复 mIsRefreshing 这个 boolean 即可。
还有一个解决的办法

publicclassWrapContentLinearLayoutManagerextendsLinearLayoutManager {
  publicWrapContentLinearLayoutManager(Context context) {
      super(context);
  }
publicWrapContentLinearLayoutManager(Context context,intorientation,booleanreverseLayout) {
    super(context, orientation, reverseLayout);
}
publicWrapContentLinearLayoutManager(Context context, AttributeSet attrs,intdefStyleAttr,intdefStyleRes) {
      super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
publicvoidonLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
  try{
    super.onLayoutChildren(recycler, state);
  }catch(IndexOutOfBoundsException e) {
    e.printStackTrace();
    }
  }
}

你可能感兴趣的:(RecyclerView内部报错,刷新崩溃RecyclerView Bug:IndexOutOfBoundsException: Inconsistency detected. Invalid item position …)