java.lang.IllegalArgumentException: view is not a child, cannot hide?

最近有个瀑布流的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();
                }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容