Android RecyclerView StaggeredGridLayoutManager瀑布流item位置变换问题解决

瀑布流 位置变换网上一搜一堆 全是一下这种方法,然而还是会有问题

 

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

你可能感兴趣的:(Android)