美文网首页
ViewPager实现RecyclerView平滑过渡数据

ViewPager实现RecyclerView平滑过渡数据

作者: 杨0612 | 来源:发表于2022-01-24 18:07 被阅读0次
    最近实现了一个需求,觉得还挺有意思的,所以在这里记录下。
    需求:tab+content(列表),上半部分显示tab数据,可以通过点击tab切换不同的content,下半部分显示content数据(列表),可以左右滑动切换不同tab的内容。如下图所示:
    图1.png

    实现方式,大家的第一反应就是RecyclerView+ViewPager(Fragment+RecyclerView)的方式,我也是这么想的。

    不过有两个细节特殊处理的:

    1.点击tab切换,需要定位到content的第一条数据;
    2.当前content往前翻页,需要定位到上一个content的最后一条数据,当前content往后翻页,需要定位到下一个content的第一条数据;
    第1个细节比较好处理,无非就是在点击tab的时候,将Fragment下的RecyclerView定位到0;
    第2个细节如图所示,当前处于tab2,往前翻页到tab1,其Fragment下的RecyclerView定位到最后一条数据tab1_3,如果是往后翻页到tab3,则定位到第一条数据tab3_1。(看起来是不是跟RecyclerView有点像)

    Tips:RecyclerView是有记忆功能的,在Fragment没有被销毁的情况下,切换恢复Fragment看到的还是之前的position,所以这里要处理position问题。
    图2.png
    处理方式

    监听ViewPager的滑动事件,在onPageSelected中对前后的Fragment进行处理,提前对position进行处理可以避免RecyclerView跳动。

                override fun onPageSelected(position: Int) {
                    resourceVpAdapter.fragmentList.get(position - 1)?.scrollToLast()//自定义函数,获取Adapter下对应的Fragment,定位到最后一条数据
                    resourceVpAdapter.fragmentList.get(position + 1)?.scrollToFirst()//自定义函数,获取Adapter下对应的Fragment,定位到第一条数据
                }
    
    Tips:onPageSelected在setCurrentItem以及vp滑动翻页都会被调用。
    为什么不用RecyclerView实现呢

    因为如果content的数据是分页加载的,那么就不好处理数据加载问题。

    以上分析有不对的地方,请指出,互相学习,谢谢哦!

    相关文章

      网友评论

          本文标题:ViewPager实现RecyclerView平滑过渡数据

          本文链接:https://www.haomeiwen.com/subject/xbwbhrtx.html