快把你繁重的viewpager换成recyclerview吧
2017-08-31 本文已影响2162人
SamanLan
相信viewpager+fragment在各个APP都已经是熟面孔了,大家对他们应该都比较熟悉了。
最近在项目中使用的这个组合被吐槽有各种问题,因为vp中使用的fragment分量比较重(view数目比较多),而且vp嵌套的布局也存在一些问题(NestScroll嵌套vp+recyclerview等),暴露出了上下滑动灵敏,左右滑动卡顿等问题。
想过的解决方案
- 自定义view。(没达到预期效果,对于滑动处理同样存在问题)
- recyclerview第一项嵌套vp。(相信很多APP都是这样做的,不过可能是由于上述所说,fragment分量问题,vp滑动没有问题,但rv滑动到第一项就出现卡顿了)
- recyclerview第一项嵌套recyclerview。(你没看错,第一项嵌套一个横向布局的rv,最后结果是无比的顺畅)
现在说说第3点的实现
- rv实现vp效果,这种效果github上面一搜估计就会有了,不过!!!现在是谷歌原生支持了!!!普天同庆。
而且代码十分简单粗暴,一行代码实现vp滑动效果(关于Snaphelper,自行搜索一下)
- 不过这种实现方式对比vp来说也存在一些缺点,缺少了一些相应的监听或者API。
比如滑动结束监听、获取当前position、左滑还是右滑。不过上有政策下有对策,只需要我们手动加一些代码即可
首先是获取当前position和左滑还是右滑
然后是滑动结束监听
滑动结束不过当你调用
滑动到指定某一项
这个API的时候,上面那个滑动状态改变监听事件是不会触发的,故需要自己去调用滑动结束的事件,缺点之一
还有一个缺点就是没有viewpager那种Transformer效果,不过同样的,rv带来的效率和流畅性不是vp+fragment能比的。故针对项目需要,各取所需吧!!