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();
}
}
}
网友评论