美文网首页android 技术梳理知识图谱
什么!ViewPager 不好使了?ViewPager2 来了

什么!ViewPager 不好使了?ViewPager2 来了

作者: jkwen | 来源:发表于2021-04-04 10:48 被阅读0次

    前面刚整理过 ViewPager,觉得用着还行,接着又看到官方推荐用 ViewPager2 了,升级版香不香,来看看就知道了。

    ViewPager2 想比较 ViewPager 而言的优势在于,

    • 支持垂直方向滑动(这点感觉蛮实用)

    • 支持从右到左滑动(秀啊,但是这样的需求很少吧)

    • 支持动态修改页面数量(就像集合适配器一样可以刷新)

    • 支持嵌套滚动(默认是不支持的,需要设置)

    那用了 ViewPager2 要怎么和 TabLayout 结合呢?

    布局调整

    之前说过 ViewPager 与 TabLayout 在布局上的摆放可以有两种形式,而到了 ViewPager2,只能用一种平铺形式,并通过代码做关联。

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <com.google.android.material.tabs.TabLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
        <androidx.viewpager2.widget.ViewPager2
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    </LinearLayout>
    

    代码关联

    ViewPager 和 TabLayout 的代码关联用的是 TabLayout 的方法 setupWithViewPager(), 到了 ViewPager2 可不是这样,而是通过 TabLayoutMediator 类来做了个关联。

    这个类归属在 com.google.android.material.tabs 路径下,并且要求 material 依赖版本要 1.1.0 及以上。

    //用法比较简单,通过构造方法创建对象,入参有三个,
    //分别是 tablayout, viewpager2, 还有一个回调接口实例
    //通过这个回调方法可以设置 tab 的名称,样式等
    TabLayoutMediator(dataBinding.categoryTabs, dataBinding.vpMessage) { tab, position ->
                tab.text = mPresenter.getPageTitle(position)
            }.attach()
    

    适配器调整

    原本 ViewPager 的适配器实现可以有三种方式,分别继承自 PagerAdapter,FragmentPagerAdapter,FragmentStatePagerAdapter。现在只有两个选择,RecyclerView.Adapter 替换原来的 PagerAdapter,Fragment 相关的适配器合并为一种,即 FragmentStateAdapter。

    与原本的适配器有两点不同,

    • 方法名改变了

    • getPageTitle() 方法弃用,关联 TabLayout 时,将使用 TabLayoutMediator

    官方对 ViewPager 显然是准备放弃了,所以如果项目里还没用 ViewPager,可以直接用 ViewPager2 了,如果已经用了,怎么转到 ViewPager2 已经在上面列出来了。

    我们还是尽早拥抱变化吧。

    相关文章

      网友评论

        本文标题:什么!ViewPager 不好使了?ViewPager2 来了

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