前面刚整理过 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 已经在上面列出来了。
我们还是尽早拥抱变化吧。
网友评论