作者:燕歆波
导读:使用瀑布流时,发现item的顺序在滑动时突然顺序改变了,造成了设置的间距变化,从而导致整个页面错乱。

简介
在adapter中,我获取item的位置,根据位置设置item的左右间距:

如果像上面一样,第一个item比第二个item的高度低的话,那么是没有问题的(偶数item在左,奇数item在右);
但是如果第一个item比第二item高的话,就会出现偶数item在右,奇数item在左的问题。
这样的话,当第二个item高度比第一个item的低时,第三个item将排列在第二个item的下方,
那么通过position判断设置间隔的方法就不成立了。这就导致item间隔的错乱
在查找了一些博客之后,找到了StaggeredLayoutManager.LayoutParams类中有一个getSpanIndex()的方法,可以获取item在span中的下标。这样的话问题就可以解决了,只要将position替换为span的下标判断item的位置,就不会出现间隔错乱的问题,(注:这样是解决了间隔的问题,但是并没有解决 奇数偶数 item 位置交替的问题)。

```
public class StaggeredGridDivider extends RecyclerView.ItemDecoration {private Context context;private int interval;public StaggeredGridDivider(Context context, int interval) {this.context = context;this.interval = interval;}@Overridepublic void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams();// 获取item在span中的下标int spanIndex = params.getSpanIndex();int interval = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,this.interval, context.getResources().getDisplayMetrics());// 中间间隔if (spanIndex % 2 == 0) {outRect.left = 0;} else {// item为奇数位,设置其左间隔outRect.left = interval;}// 上方间隔outRect.top = interval;}
}
还有一个问题是,从详情页回到列表页时,定位到指定位置回去先顶部空出一片空白的问题,
解决办法是给RecyclerView添加OnScrollListener,并在其onScrollStateChanged方法中监听RecyclerView是否滑到顶部,
若滑到顶部,则调用StaggeredLayoutManager的invalidateSpanAssignments方法刷新间隔。
int spanCount = 2
rv.addOnScrollListener(new OnScrollListener() {@Overridepublic void onScrollStateChanged(RecyclerView recyclerView, int newState) {int[] first = new int[spanCount];layoutManager.findFirstCompletelyVisibleItemPositions(first);if (newState == RecyclerView.SCROLL_STATE_IDLE && (first[0] == 1 || first[1] == 1)) {layoutManager.invalidateSpanAssignments();}  }
})

RecyclerView瀑布流造成的item错乱相关推荐

  1. Android 解决RecyclerView瀑布流刷新之后Item位置改变

    解决RecyclerView瀑布流刷新之后Item位置改变 为了测试RecyclerView瀑布流效果,每个Item的高度采取了随机高度,导致每次刷新的时候,重新随机出来的高度和原来的不一致,会导致I ...

  2. 解决RecyclerView瀑布流效果结合Glide使用时图片变形的问题

    解决RecyclerView瀑布流效果结合Glide使用时图片变形的问题 参考文章: (1)解决RecyclerView瀑布流效果结合Glide使用时图片变形的问题 (2)https://www.cn ...

  3. Android瀑布流仿京东,(二) 仿京东顶部伸缩渐变丶自定义viewpager指示器丶viewpager3D回廊丶recyclerview瀑布流...

    效果图如下: demo2.gif Demo2 1.仿京东首页顶部轮播图+搜索栏渐变 public class GradientScrollView extends ScrollView { publi ...

  4. RecyclerView 瀑布流错乱

    记录一下,瀑布流错乱问题 问题 主要是在Item中图片并不会固定宽高,而是在加载后再去计算的,所以在复用子View时不断的进行重新排版,导致最后展示时出现了偏差,也就是错乱留白. 解决办法 解决办法也 ...

  5. RecyclerView瀑布流的形式利用Gilde加载网络图片

    RecyclerView的简单介绍 RecyclerView 是在Android5.0之后推出的,是一个比ListView更加灵活更加高效的适配器类型控件.但是RecyclerView不同于其他类型的 ...

  6. android 瀑布流 空白,Android瀑布流优化,解决Recyclerview展示大批量图片时Item自动切换、闪烁、空白等问题...

    本文涉及的代码案例可以在下方的链接中找到,如果对你有帮助,请给个Star(#^.^#) 问题分析 这段时间业务需求用到RecyclerView瀑布流加载并展示大批量图片,但一开始单纯使用Recycle ...

  7. android 水平方向瀑布流,Android RecyclerView(瀑布流)水平/垂直方向分割线

     Android RecyclerView(瀑布流)水平/垂直方向分割线 Android RecyclerView不像过去的ListView那样随意的设置水平方向的分割线,如果要实现Recycle ...

  8. uview 瀑布流_RecyclerView瀑布流的那些坑

    RecyclerView的布局排列主要通过布局管理器--LayoutManager去实现,不同的布局能为使得RecyclerView拥有不同的排列效果.StaggeredGridLayoutManag ...

  9. Recycle网格制式之瀑布流的实现

    瀑布流样式 RecyclerView的瀑布流布局管理器是StaggeredGridLayoutManager,它最常用的构造函数就一个,StaggeredGridLayoutManager(int s ...

最新文章

  1. springboot日志logback配置
  2. Shell的条件表达式知识初步介绍实践
  3. 只读副本和Spring Data第2部分:配置基础项目
  4. Spring4:没有默认构造函数的基于CGLIB的代理类
  5. java原生怎么发请求,java原生http请求post
  6. matlab进行图片修补,Matlab基于样本的图像修补方法代码的一些问题!
  7. php eclipse 版本_PHPEclipse官方下载
  8. 智能汽车路径规划学习-Dijkstra、蚁群算法
  9. ECharts 教程
  10. webmax官方动态
  11. win7科学计算机的用法,Win7自带计算器使用功能介绍
  12. python的django模块_Python django-stubs包_程序模块 - PyPI - Python中文网
  13. 知物由学 | Android 模拟点击研究,如何突围“黑灰产”的自动化作弊?
  14. 大数据正当时,理解这几个术语很重要
  15. tableau:人口金字塔图
  16. 台式计算机键盘进水了还能用,台式电脑键盘进水了怎么办
  17. 深入理解原子操作-底层基础
  18. EN 13163-2012 建筑保温产品,工厂生产发泡聚苯乙烯(EPS)产品.规范
  19. 基于(springmvc+tomcat+JavaScript)实现化妆品商城系统
  20. C# P3色域计算、计算色域覆盖率、已知坐标求多边形面积计算、已知两条线的坐标求交点计算、坐标顺时针排序计算

热门文章

  1. python实现九宫格华容道小游戏
  2. android 扫码枪编程,Android扫描枪(PDA)开发
  3. dell服务器uefi启动不了系统安装系统安装,戴尔做uefi系统-uefi启动进不去系统怎么办呀...
  4. 电感的能量储存在哪里-史上最深度的解析(6)
  5. Ubuntu18.04 火狐浏览器 安装flash插件
  6. 作为Java开发工程师如何正确地对待和处理工作中的失误学习方法建议教训成长技巧[王大师]
  7. “盗梦”,指的是“在梦中盗取你的秘密”,而不是“盗取你的梦”
  8. 各大电商平台商品详情、商品信息实时数据api
  9. DTE DCE的含义和判断方法
  10. threejs 微信小游戏中的离屏渲染做UI和排行榜