ViewPager2简介
距离ViewPager2
正式版的发布已经一年多了,目前ViewPager
早已停止更新,官方鼓励使用ViewPager2替代。 ViewPager2
底层基于RecyclerView
实现,因此可以获得RecyclerView
带来的诸多收益:
- 抛弃传统的
PagerAdapter
,统一了Adapter
的API
; - 横向、竖向布局都可以实现自由滑动;
- 支持
DiffUitl
,可以实现局部刷新; - 支持
RTL
(right-to-left),对于一些有出海需求的APP非常有用; - 支持
ItemDecorator
,搭配PageTransformer
实现炫酷的跳转动画;
ViewPager2
更多的是配合Fragment
的使用,这需要借助于FragmentStateAdapter
。
他们偶尔会搭配TabLayout
一起使用,相关代码直接阅读或者运行 ViewPager2官网Samples 即可,这里不做重复的讲解。
下面主要讲一下在使用过程中遇到的问题~!
实际操作效果
上滑吸顶+标题页面左右滑动+横滑和竖滑列表+标题页面数据和数量更新
上滑吸顶
CoordinatorLayout
+AppBarLayout
+CollapsingToolbarLayout
左右滑动
ViewPager2
+TabLayout
+Fragment
横滑和竖滑列表
RecycleView
+NestedScrollableHost
标题页面数据和数量
TabLayoutMediator
+声明周期检测+缓存优化
RecycleView和Viewpage2的滑动冲突
/**
- Created by Tanzhenxing
- Date: 2021/4/7 7:04 下午
- Description:解决 [RecyclerView] 嵌套到 [androidx.viewpager2.widget.ViewPager2] 左右滑动冲突
- 目前只解决了左右滑动冲突
*/
class RecyclerViewAtViewPager2 : RecyclerView {
constructor(context: Context) : this(context, null)
constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
var x1 = 0f
var x2 = 0f
override fun dispatchTouchEvent(event: