美文网首页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