Android RecyclerView StaggeredGridLayoutManager瀑布流item位置变换问题解决
16lz
2021-01-23
瀑布流 位置变换网上一搜一堆 全是一下这种方法,然而还是会有问题
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 ListView 刷新数据,加载时遇到的数组越界问题
- android sdk content loader 加载很慢的解决方法
- Android获取状态栏、标题栏、ActionBar以及屏幕的高度
- Android ProgressBar 自定义样式(六),仿真QQ pad版加载(位置居中)
- Android获取屏幕的高度和宽度
- android 中listview滑动加载的简单demo
- Android在WebView加载数据时展示loading的Dialog
- 【Android】获取屏幕分辨率和顶栏高度全屏和横屏