版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31008549/article/details/80167647
瀑布流 位置变换网上一搜一堆 全是一下这种方法,然而还是会有问题
manager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE); //防止item 交换位置 recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); manager.invalidateSpanAssignments(); //防止第一行到顶部有空白区域 } });
其实可以不用写这两种方法,就可以解决了。
在请求到数据之后,我们一般是用
Adapter.notifyDataSetChanged();
但是瀑布流,这里我们需要换一种方法就是
Adapter.notifyItemInserted(mPosition);
这个mPosition就是加载新数据的第一个position
这样就可以完美解决item变换的问题了,完美。
其次就是要注意:
if (mHeights.size() <= position) { mHeights.add((int) (height / ((float) width / (StringUtil.getWidths(context) / 2 - 30)))); } StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) holder.rlAll.getLayoutParams(); params.height = mHeights.get(position); holder.rlAll.setLayoutParams(params);
1.适配器里面的宽高需要用集合存起来,防止复用的时候重新计算高度出现问题
2.一定要先计算高度,然后加载图片(切记)
还有其他问题欢迎探讨!QQ 240272348