RecyclerView Bug:IndexOutOfBoundsException: Inconsistency detected. Invalid item position …
重現(xiàn)的方法是:使用 RecyclerView
加官方下拉刷新的時候,如果綁定的 List 對象在更新數(shù)據(jù)之前進(jìn)行了 clear骑科,而這時用戶緊接著迅速上滑 RV橡淑,就會造成崩潰,而且異常不會報到你的代碼上咆爽,屬于RV內(nèi)部錯誤梁棠。
就是在刷新,也就是 clear 的同時斗埂,讓 RecyclerView
暫時不能夠滑動符糊,之后再允許滑動即可。代碼就是在 RecyclerView
初始化的時候加上是否在刷新進(jìn)而攔截手勢:(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;
}
}
});
然后去改變和恢復(fù) 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();
}
}
}