StaggeredGridLayoutManager瀑布流错乱和顶部空白问题解决
来源:互联网 发布:淘宝网店上架 编辑:程序博客网 时间:2024/06/05 22:30
遇到这个问题,去网上搜索的答案一般是:
staggeredGridLayoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE);然后在onScrollStateChanged方法里:
staggeredGridLayoutManager.invalidateSpanAssignments();
但是,这样做之后还是会有item错乱的问题,这种做法是在滑动停止的时候重新requestLayout一下而已,invalidateSpanAssignments()源码如下:/** * For consistency, StaggeredGridLayoutManager keeps a mapping between spans and items. * <p> * If you need to cancel current assignments, you can call this method which will clear all * assignments and request a new layout. */public void invalidateSpanAssignments() { mLazySpanLookup.clear(); requestLayout();}可以看出,此方法并不能从根本上解决错乱的问题,要解决此问题,还需从原因下手。
为什么会出现空白和错乱现象?
空白和错乱本质上是同一个原因造成的。是因为recyclerview的复用机制遇上图片异步加载造成的,当瀑布流需要加载的图片的高度不一致时,假设第一个离开屏幕后的item的图片高度是100,被回收,而下一个要进入屏幕的item的图片高度是80,当图片还没加载完,下个item复用了第一个离开屏幕的item,产生了20的高度差,所以会出现错乱的现象,表现为图片展示区域与图片不匹配,要避免错乱,需要从item的高度控制入手
解决方案:
在onBind方法中,必须在图片加载方法之前设置图片高度:
ViewGroup.LayoutParams imageLayoutParams = imageViewHolder.image.getLayoutParams();imageLayoutParams.width = CommonUtil.getDMWidthPixels(mContext) / 2;//获取实际展示的图片宽度imageLayoutParams.height = (int) (imageLayoutParams.width * density);//获取最终图片高度imageViewHolder.image.setLayoutParams(imageLayoutParams);//应用高度到布局中这样,在每次onbind方法刚开始执行,图片没加载出来之前,先给图片预留出来一定的高度,使每个item的高度固定,就不会再出现item错乱的问题
阅读全文
0 0
- StaggeredGridLayoutManager瀑布流错乱和顶部空白问题解决
- StaggeredGridLayoutManager 瀑布流返回顶部时跳跃问题 解决办法
- StaggeredGridLayoutManager 瀑布流返回顶部时出现跳跃
- 瀑布流 RecycleView 的 StaggeredGridLayoutManager?
- 使用StaggeredGridLayoutManager实现瀑布流效果
- 使用StaggeredGridLayoutManager实现瀑布流效果
- 使用StaggeredGridLayoutManager瀑布流,Glide显示图片
- RecyclerView采用StaggeredGridLayoutManager布局的瀑布流效果
- Android RecyclerView+StaggeredGridLayoutManager实现瀑布流图片闪烁问题
- RecyclerView和StaggeredGridLayoutManager实现瀑布流向下滑动item跳动、留白的问题
- RecyclerView 瀑布流的配置以及它的 StaggeredGridLayoutManager 布局管理器的使用
- 解决HTML顶部和两侧空白问题
- 关于瀑布流和回到顶部的功能的冲突解决
- Android RecyclerView瀑布流位置变化和顶部留白问题
- iOS11 Tableview顶部空白和Section Header留白问题
- convertView重用和异步加载图片造成错乱问题解决
- 蓝条下压和消失导致页面错乱问题解决方案
- require 顶部空白
- Linux挂载(含VM+Windows+Linux共享)
- vue--目录结构介绍
- Netty进行Socket编程(二)
- Java中IO流应用举例
- 376. Wiggle Subsequence
- StaggeredGridLayoutManager瀑布流错乱和顶部空白问题解决
- 安装tensorflow,运行MNIST示例
- 李开复给中国大学生的七封公开信(其一)
- 部署BIMserver到服务器
- vector 避免内存频繁分配释放与手动释放vector内存
- 关于react组件渲染两次的问题
- http://www.cnblogs.com/jackmaxwell/p/6220511.html
- html中的特殊字符(空格,括号等)
- 八大排序算法