最近有个瀑布流的recycleView在加载数据的时候报这个错,耗时半天才解决,记录一下解决方式。
瀑布流为双列显示。
报错位置代码:
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
if (layoutManager instanceof StaggeredGridLayoutManager) {
int[] last = ((StaggeredGridLayoutManager) layoutManager).findLastVisibleItemPositions(null);
for (int i = 0; i < last.length; i++) {
if ((last[i] >= mAdapter.getItemCount() - 4) && !isLoadingData) {
loadMore();
break;
}
}
}
此地方在加载更多数据的时候触发加载数据。
经过调试,发现只有在加载一条数据的时候才会出现异常。
最终发现在请求到数据之后返回刷新数据的时候造成的。
改动之前的代码如下:
if (!isrefresh ) {
mAdapter.notifyItemRangeChanged(mDataList.size() - data.size(), mDataList.size());
} else {
mAdapter.notifyDataSetChanged();
}
解决之后的代码如下:
//此处data.size() > 1是因为当请求到的数据只有1个时,
//StaggeredGridLayoutManager.findLastVisibleItemPositions(null)方法会报错,导致崩溃。
if (!isrefresh && data.size() > 1) {
mAdapter.notifyItemRangeChanged(mDataList.size() - data.size(), mDataList.size());
} else {
mAdapter.notifyDataSetChanged();
}