瀑布流 位置变换网上一搜一堆 全是一下这种方法,然而还是会有问题
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就是加载新数据集合的大小 比如 list.size();
这样就可以完美解决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