快把你繁重的viewpager换成recyclerview吧

相信viewpager+fragment在各个APP都已经是熟面孔了,大家对他们应该都比较熟悉了。
最近在项目中使用的这个组合被吐槽有各种问题,因为vp中使用的fragment分量比较重(view数目比较多),而且vp嵌套的布局也存在一些问题(NestScroll嵌套vp+recyclerview等),暴露出了上下滑动灵敏,左右滑动卡顿等问题。
想过的解决方案

  1. 自定义view。(没达到预期效果,对于滑动处理同样存在问题)
  2. recyclerview第一项嵌套vp。(相信很多APP都是这样做的,不过可能是由于上述所说,fragment分量问题,vp滑动没有问题,但rv滑动到第一项就出现卡顿了)
  3. recyclerview第一项嵌套recyclerview。(你没看错,第一项嵌套一个横向布局的rv,最后结果是无比的顺畅)

现在说说第3点的实现

  1. rv实现vp效果,这种效果github上面一搜估计就会有了,不过!!!现在是谷歌原生支持了!!!普天同庆。
    而且代码十分简单粗暴,一行代码实现vp滑动效果(关于Snaphelper,自行搜索一下)
实现
  1. 不过这种实现方式对比vp来说也存在一些缺点,缺少了一些相应的监听或者API。
    比如滑动结束监听、获取当前position、左滑还是右滑。不过上有政策下有对策,只需要我们手动加一些代码即可
    首先是获取当前position和左滑还是右滑
快把你繁重的viewpager换成recyclerview吧_第1张图片
自己实现

然后是滑动结束监听

快把你繁重的viewpager换成recyclerview吧_第2张图片
滑动结束

不过当你调用


滑动到指定某一项

这个API的时候,上面那个滑动状态改变监听事件是不会触发的,故需要自己去调用滑动结束的事件,缺点之一

还有一个缺点就是没有viewpager那种Transformer效果,不过同样的,rv带来的效率和流畅性不是vp+fragment能比的。故针对项目需要,各取所需吧!!

你可能感兴趣的:(快把你繁重的viewpager换成recyclerview吧)