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

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值