关于RecyclerView scrollToPosition滚不到底的问题

https://www.zybuluo.com/RitcheeQinG/note/1762203

老生常谈,目前网上这部分内容其实挺多的,但其中很多方法看上去真的很离谱,如果有好办法我实在不想采取那些。老样子,本文只写我自己遇到的情况
先说结论:
如果你的RecyclerView里面包含图片,那就在bind时手动将其宽高设置好,不要写成wrap_content + maxHeight + adjustViewBounds这种

为什么?
其实也挺好理解,就不说源码了,简单解释一下,RecyclerView滚动的原理是先计算要滚动的距离,然后再滚过去;那么如果滚动不彻底自然是距离计算出错了,那为什么会出错?自然是图片+wrap_content让itemView不知道自己应该有多高,故返回了个最小值,那自然就滚少了。

那么说说我自己:
我做RecyclerView目前是为了实现一个消息列表,其中包含文字消息,图片消息,别的乱七八糟的消息。
写的好好的,我遇到了第一个问题:
1.布局滑动时会漂移。
这能忍?我啪的一下就把imageView宽高写死了,再加个 adjustViewBounds = true,很快啊!什么问题都解决了。
那之后,本来写得高高兴兴,结果设计找上门了:“你这样子不行啊,图片怎么能全固定呢?”
我人就傻了,好一顿改,欸,maxWidth + maxHeight + adjustViewBounds + wrap_content,搞定!
按传统开发的点到为止,这问题就解决了,可我没想到,RecyclewView它不讲武德,scrollToPosition 突然滚不到底下了,这次都不用设计来了,我第一个就接受不了。
机智如我,首先试了一下 scrollBy(0, Integer.MAX_VALUE) ,希望大力出奇迹,让它滚过去,结果毫无卵用。大概是RV滚到一定程度就判断自己滚到头了,傲娇了。
那我也只能徐徐图之,再尝试给我们之间增加一点距离感 —— new Handler().postDelayed() ,延迟转,这下布局就来得及滚到底了吧?
结果rv还是不鸟我,问题从一定存在变成了时而发生。
那肯定也不行啊,最终我只好费力把整个图片的容器做成了包含其原始宽高的形式,如果解不出来,那就 Bitmap.decode() 给它算出来,然后手动限制最大最小宽高,再设置给itemView.LayoutParams ,问题终于解决了。
最后,我奉劝recyclerview耗子尾汁,不要搞——窝里斗。

你可能感兴趣的:(关于RecyclerView scrollToPosition滚不到底的问题)