美文网首页
RecyclerView内部报错,刷新崩溃RecyclerVie

RecyclerView内部报错,刷新崩溃RecyclerVie

作者: 不识水的鱼 | 来源:发表于2017-08-11 09:39 被阅读225次

    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内部报错,刷新崩溃RecyclerVie

          本文链接:https://www.haomeiwen.com/subject/hwclrxtx.html