RecyclerView实现的瀑布流如何防止在滑动过程中子View自动换位置

孟凡勇 2016-01-26 11:05:12
RecyclerView实现的瀑布流如何防止在滑动过程中子View自动换位置?每次滑动的过程中,子View会互换位置,或者左右两列 互换位置,我把动画关闭之后还是会换,仅仅是没有动画了,有什么办法吗,公司的需求是让子View固定在一个位置,不能互换
...全文
4127 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
诺伦 2017-11-04
  • 打赏
  • 举报
回复
通过设置 RecyclerView.RecycledViewPool 对象池大小 防止过度的复用viewholder 这样就能规避这个问题,比如一页可以显示10个 pool可以设置为50 这样在滑动过程中 可以避免复用当前显示的viewhold 来规避当前有效的viewhold复用互换位置 已通过这种方法解决问题
  • 打赏
  • 举报
回复
http://46aae4d1e2371e4aa769798941cef698.devproxy.yunshipei.com/sinat_21693123/article/details/50317399 上述链接提供的方法,导致页面空白。有其他方法没?同求!
amwsffkhtd 2016-07-08
  • 打赏
  • 举报
回复
引用 7 楼 s2976287 的回复:
应该是和我遇到的问题一样了,因为在onBindViewHolder()给item设置个随机的高度,滑动过程中一直走onBindViewHolder()方法在重新给item设置高度,所以才会换位置。 定义一个集合存储高度 private List<Integer> mHeights; 在onBindViewHolder()中 if (mHeights.size() <= position) { mHeights.add((int) (100 + Math.random() * 300)); } StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams)holder.lay.getLayoutParams(); layoutParams.height = mHeights.get(position); holder.lay.setLayoutParams(layoutParams); 原址: http://www.jianshu.com/p/402466ae7b15
这个方法可行。已实践通过!
Hello5230 2016-06-06
  • 打赏
  • 举报
回复
引用 13 楼 u013290250 的回复:
[quote=引用 12 楼 windows771053651 的回复:]
[quote=引用 10 楼 u013290250 的回复:]
[quote=引用 9 楼 windows771053651 的回复:]
找了一天才在别人博客上找到了解决方案,希望能帮到你:
http://46aae4d1e2371e4aa769798941cef698.devproxy.yunshipei.com/sinat_21693123/article/details/50317399

网址进不去?[/quote]进得去的[/quote]
这个方法,有问题。是不会出现,位置互换,但是导致两边的数据位置换了。[/quote]
不会啊,我的完全没问题,再说的,position是由系统控制的,肯定不会错,应该是你其他代码错了,这是我的代码。
怀君 2016-06-02
  • 打赏
  • 举报
回复
引用 12 楼 windows771053651 的回复:
[quote=引用 10 楼 u013290250 的回复:] [quote=引用 9 楼 windows771053651 的回复:] 找了一天才在别人博客上找到了解决方案,希望能帮到你: http://46aae4d1e2371e4aa769798941cef698.devproxy.yunshipei.com/sinat_21693123/article/details/50317399
网址进不去?[/quote]进得去的[/quote] 这个方法,有问题。是不会出现,位置互换,但是导致两边的数据位置换了。
Hello5230 2016-05-31
  • 打赏
  • 举报
回复
引用 10 楼 u013290250 的回复:
[quote=引用 9 楼 windows771053651 的回复:] 找了一天才在别人博客上找到了解决方案,希望能帮到你: http://46aae4d1e2371e4aa769798941cef698.devproxy.yunshipei.com/sinat_21693123/article/details/50317399
网址进不去?[/quote]进得去的
Hello5230 2016-05-31
  • 打赏
  • 举报
回复
进得去啊,没问题的
Hello5230 2016-05-27
  • 打赏
  • 举报
回复
找了一天才在别人博客上找到了解决方案,希望能帮到你: http://46aae4d1e2371e4aa769798941cef698.devproxy.yunshipei.com/sinat_21693123/article/details/50317399
Hello5230 2016-05-27
  • 打赏
  • 举报
回复
求解决方案,俺也遇到了
怀君 2016-05-27
  • 打赏
  • 举报
回复
引用 9 楼 windows771053651 的回复:
找了一天才在别人博客上找到了解决方案,希望能帮到你: http://46aae4d1e2371e4aa769798941cef698.devproxy.yunshipei.com/sinat_21693123/article/details/50317399
网址进不去?
龙龙瞌睡 2016-05-23
  • 打赏
  • 举报
回复
应该是和我遇到的问题一样了,因为在onBindViewHolder()给item设置个随机的高度,滑动过程中一直走onBindViewHolder()方法在重新给item设置高度,所以才会换位置。 定义一个集合存储高度 private List<Integer> mHeights; 在onBindViewHolder()中 if (mHeights.size() <= position) { mHeights.add((int) (100 + Math.random() * 300)); } StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams)holder.lay.getLayoutParams(); layoutParams.height = mHeights.get(position); holder.lay.setLayoutParams(layoutParams); 原址: http://www.jianshu.com/p/402466ae7b15
Percycj 2016-05-09
  • 打赏
  • 举报
回复
问题解决了吗?同求?
笨熊不笨 2016-03-07
  • 打赏
  • 举报
回复
同求解决的办法!!!!!!!!!!!
xinlianzhou 2016-03-03
  • 打赏
  • 举报
回复
我也遇到这个问题,求高手说一下。
怀君 2016-01-30
  • 打赏
  • 举报
回复
这个需要,算高度。我这边也没算。一直就这样。会换位置。
StoneHui_ 2016-01-30
  • 打赏
  • 举报
回复
View的高度变了才会变位置。
Tiimor 2016-01-30
  • 打赏
  • 举报
回复
顶一个。这个问题该如何解决,求大神

80,359

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧