美文网首页
java.lang.IllegalArgumentExcepti

java.lang.IllegalArgumentExcepti

作者: 初见soulmate | 来源:发表于2020-06-20 16:13 被阅读0次

最近有个瀑布流的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();
                }

相关文章

网友评论

      本文标题:java.lang.IllegalArgumentExcepti

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