ViewPager2
最新更新 | 稳定版发布 | 候选发布 | Beta 版发布 | Alpha 版发布 |
---|---|---|---|---|
2024 年 5 月 14 日 | 1.1.0 | - | - | - |
AndroidX 依赖项
要使用 ViewPager2
,请将以下 AndroidX 依赖项添加到项目的 build.gradle
文件中
Groovy
dependencies { implementation "androidx.viewpager2:viewpager2:1.1.0" }
Kotlin
dependencies { implementation("androidx.viewpager2:viewpager2:1.1.0") }
反馈
您的反馈有助于改进 Jetpack。如果您发现新问题或对改进此库有任何想法,请告诉我们。请在创建新问题之前查看此库中的 现有问题。您可以通过单击星形按钮对现有问题进行投票。
有关更多信息,请参阅 问题跟踪器文档。
版本 1.1.0
版本 1.1.0
2024 年 5 月 14 日
androidx.viewpager2:viewpager2:1.1.0
已发布。版本 1.1.0 包含 这些提交。
自 1.0.0 以来重要的更改
- 修复了与 RecyclerView
1.3.1-rc01
或更高版本一起使用时发生的崩溃。 ViewPager2
现在会正确填充CollectionInfo
和CollectionItemInfo
,这些信息是 RecyclerView1.2.0-alpha02
及更高版本默认不再填充的。- 添加了
FragmentTransactionCallback
接口,用于侦听在FragmentStateAdapter
内部发生的片段生命周期更改。 - 修复了
FragmentStateAdapter
中将片段添加到FragmentManager
时初始片段菜单可见性的问题。 - 修复了窗口内边距的调度:所有页面现在都获得相同的内边距。由于在旧的 API 版本(< API 30)上调度
WindowInsets
的方式可能会阻止内边距对同级视图可用,因此如果您想在 < API 30 设备上应用内边距,则必须通过WindowInsetsApplier.install(viewPager2)
选择加入此修复。
版本 1.1.0-rc01
2024 年 5 月 1 日
androidx.viewpager2:viewpager2:1.1.0-rc01
自 1.1.0-beta02 版本发布以来没有重大变化。 1.1.0-rc01 版本包含 这些提交。
1.1.0-beta02 版本
2023 年 5 月 24 日
androidx.viewpager2:viewpager2:1.1.0-beta02
版本已发布。 1.1.0-beta02 版本包含这些提交。
API 更改
- 在
FragmentTransactionCallback
中添加了 Fragment 状态保存回调。 (I45b90) ViewPager2
现在不再尝试修复旧 API 版本 (< 30) 的错误WindowInsets
分发,因为修复本身可能对ViewPager2
的兄弟节点有害。 修复仍然可用,但已成为可选功能,因此开发人员可以根据情况自行决定。 通过调用WindowInsetsApplier.install(viewPager2))
启用修复。 (Ic9a85)
错误修复
- 修复了与较新版本的
RecyclerView
的兼容性问题。 使用此版本的ViewPager2
的用户应至少更新到RecyclerView
1.3.1-rc01。
1.1.0-beta01 版本
2021 年 8 月 4 日
androidx.viewpager2:viewpager2:1.1.0-beta01
版本已发布。 1.1.0-beta01 版本包含这些提交。
API 更改
升级 androidx 以使用 Kotlin 1.4 (Id6471, b/165307851, b/165300826)
将所有 androidx 库的目标转移到 Java 8 (2923f39)
错误修复
- 修复了窗口插图的分发,所有页面现在都获得相同的插图。 (I47fef)
1.1.0-alpha01 版本
2020 年 4 月 1 日
androidx.viewpager2:viewpager2:1.1.0-alpha01
版本已发布。 1.1.0-alpha01 版本包含这些提交。
此版本伴随着 RecyclerView 1.2.0-alpha02 中的更改,通过填充 CollectionInfo
和 CollectionItemInfo
来完成,这些信息 RecyclerView
现在不再默认提供。 当更新到 RecyclerView 1.2.0-alpha02
时,还要更新 ViewPager2
以防止辅助功能出现倒退。
新功能
- 添加了
FragmentTransactionCallback
接口,用于监听FragmentStateAdapter
内部发生的片段生命周期更改。 (Ibda77)
错误修复
- 修复了将片段添加到
FragmentManager
时,FragmentStateAdapter
在初始片段菜单可见性方面存在的问题。 (I9d2ff, b/144442240)
1.0.0 版本
1.0.0 版本
2019 年 11 月 20 日
androidx.viewpager2:viewpager2:1.0.0
版本已发布,与 1.0.0-rc01 版本没有变化。 1.0.0 版本包含这些提交。
1.0.0 版本的主要功能
- 来自先前 ViewPager 实现的改进
- RTL(从右到左)布局支持
- 垂直方向支持
- 可靠的
Fragment
支持(包括处理对底层Fragment
集合的更改) - 数据集更改动画(包括
DiffUtil
支持)
- 从先前
ViewPager
实现轻松迁移(尽可能保持 API 兼容性)。 请参阅 迁移指南 和 示例应用。
请参阅 指南,了解如何使用 ViewPager2 在片段之间滑动。
1.0.0-rc01 版本
2019 年 10 月 23 日
androidx.viewpager2:viewpager2:1.0.0-rc01
版本已发布,自 1.0.0-beta05
版本发布以来没有变化。 1.0.0-rc01 版本包含这些提交。
1.0.0-beta05 版本
2019 年 10 月 9 日
androidx.viewpager2:viewpager2:1.0.0-beta05
版本已发布。 1.0.0-beta05 版本包含这些提交。
错误修复
- 修复了在屏幕外页面上调用
requestFocus
导致页面更改的问题。 现在,该行为与原始 ViewPager 一致。 (b/140656866) - 修复了在页面更改后,
focus
仍然保留在屏幕外页面上的问题。 现在,更改页面时会清除焦点。 (b/140656866) - 修复了在更改页面时
Fragment
暂停/恢复事务的顺序(我们现在始终在恢复新主项目之前暂停旧主项目)。 (b/139489059) - 修复了
canScrollHorizontally(int)
和canScrollVertically(int)
- 它们现在返回 ViewPager2 是否可以在给定方向上滚动。 (b/141848404) - 修复了 SwipeRefreshLayout 中的问题,使其能更好地与 ViewPager2 配合使用。
1.0.0-beta04 版本
2019 年 9 月 5 日
androidx.viewpager2:viewpager2:1.0.0-beta04
版本已发布。 此版本中包含的提交可在此处找到 此处。
错误修复
- 修复了
FragmentStateAdapter
在Fragment
后退堆栈方面存在的边缘情况问题。 (b/139095195) - 修复了
EditText
在某些属性配置情况下,在键入/聚焦时会导致滚动/页面跳跃的问题。 (b/138044582, b/139432498) - 修复了
ItemDecoration
实例方面存在的问题,以及用于解决过度滚动指示器定位问题的变通方法。 (b/139012032) - 修复了其他组件中的许多问题,使其能更好地与
ViewPager2
配合使用:RecyclerView、NestedScrollView 和 Navigation。
1.0.0-beta03 版本
2019 年 8 月 7 日
androidx.viewpager2:viewpager2:1.0.0-beta03
版本已发布。 此版本中包含的提交可在此处找到 此处。
错误修复
- 修复了
FragmentStateAdapter
在瞬态Fragment
状态方面存在的问题。 b/134246546 - 修复了在平滑滚动期间更改数据集时出现的
currentItem
和scrollState
问题(已解决边缘情况)。 b/137642608 - 修复了
PageTransformer
(包括MarginPageTransformer
)动画与数据集更改动画冲突的问题。 b/134658996 - 修复了大型数据集中的平滑滚动动画问题(
float
整数值限制)。 b/134858960
1.0.0-beta02 版本
2019 年 7 月 19 日
androidx.viewpager2:viewpager2:1.0.0-beta02
版本已发布。 此版本中包含的提交可在此处找到 此处。
错误修复
- 删除了在
1.0.0-beta01
版本中引入的无意 jacoco 依赖项。 (b/137782951)
1.0.0-beta01 版本
2019 年 7 月 17 日
androidx.viewpager2:viewpager2:1.0.0-beta01
版本已发布。 此版本中包含的提交可在此处找到 此处。
错误修复
- 修复了在滚动和更新数据集时,
ViewPager2.updateCurrentItem
崩溃的问题 - 修复了与
ViewPager2.isLayoutRtl
相关的NullPointerException
崩溃问题 TOUCH_SLOP_PAGING
现在是默认触摸间隙- 修复了针对空适配器(页面
0
而不是-1
,以与ViewPager1
保持一致)的OnPageChangeCallback
事件
已知问题
- 在迁移到稳定版之前,我们仍在努力解决 剩余的未解决问题
1.0.0-alpha06 版本
2019 年 7 月 2 日
androidx.viewpager2:viewpager2:1.0.0-alpha06
版本已发布。 此版本中包含的提交可在此处找到 此处。
这是我们计划发布的最后一个 alpha 版本,在冻结 API 并迁移到 beta 版本之前 - 请向我们提供有关 API 的反馈。
新功能
- 改进辅助功能的基础:
ACTION_PAGE_RIGHT
、ACTION_PAGE_DOWN
等。
API 更改
FragmentStateAdapter
:非主项目的Fragment
被限制为STARTED
,并且它们的menuVisibility
设置为 false。PageTransformer
、MarginPageTransformer
、CompositePageTransformer
:position
文档已修复。
错误修复
- 修复了更改数据集/适配器后
currentItem
的问题。 - 修复了使用
offscreenPageLimit
的MarginPageTransformer
问题。 - 修复了在
FakeDrag
行为期间出现的辅助功能操作问题。
1.0.0-alpha05 版本
2019 年 6 月 5 日
androidx.viewpager2:viewpager2:1.0.0-alpha05
版本已发布。 此版本中包含的提交可在此处找到 此处。
新功能
- 引入了
ItemDecorator
,其行为与RecyclerView
一致。 - 引入了
MarginPageTransformer
,用于提供在页面之间创建间距(在页面内边距之外)的功能。 - 引入了
CompositePageTransformer
,用于提供组合多个PageTransformer
的功能。
API 更改
- 将
FragmentStateAdapter#getItem
方法重命名为FragmentStateAdapter#createFragment
- 以前的名称过去一直是错误的根源。 - 将
OFFSCREEN_PAGE_LIMIT_DEFAULT
值从0
更改为-1
。 如果使用OFFSCREEN_PAGE_LIMIT_DEFAULT
常量,则无需更改客户端代码。
错误修复
- 更正了
getCurrentItem()
的行为,当SCROLL_STATE_SETTLING
被反方向的拖动打断时。 - 解决了在“不保留活动”上下文中,
FragmentStateAdapter
类加载器方面存在的问题。 - 改进了
setOffscreenPageLimit
的文档。
1.0.0-alpha04 版本
2019 年 5 月 7 日
androidx.viewpager2:viewpager2:1.0.0-alpha04
已发布。此版本包含的提交可以在这里找到 here.
新功能
offscreenPageLimit
:允许对视图层次结构中保留的页面View
/Fragment
的数量进行严格控制
API 更改
orientation
和isUserScrollable
属性不再是SavedState
的一部分saveState
和restoreState
方法在FragmentStateAdapter
中变为 finalViewPager2.Orientation
和ViewPager2.ScrollState
注释变为非公开
错误修复
SavedState
:修复了Activity
被销毁/重建时恢复的问题SavedState
:将恢复延迟到设置适配器为止OnPageChangeCallback
:修复了轻微的边缘情况
版本 1.0.0-alpha03
2019 年 4 月 3 日
androidx.viewpager2:viewpager2:1.0.0-alpha03
已发布。此版本包含的提交可以在这里找到 here.
新功能
- 能够以编程方式滚动 ViewPager2:
fakeDragBy(offsetPx)
。
API 更改
FragmentStateAdapter
现在需要一个Lifecycle
对象。添加了两个实用程序构造函数以从主机FragmentActivity
或主机Fragment
中获取它。
错误修复
- 许多
Fragment
支持修复- 在最小化或屏幕旋转期间处理数据集更新;
- 在旋转后删除不相关的 Fragment;
- 删除已删除项目的保存状态。
PageChangeCallback
:修复了具有边距的页面的页面偏移计算。
版本 1.0.0-alpha02
2019 年 3 月 13 日
androidx.viewpager2:viewpager2:1.0.0-alpha02
已发布。此版本包含的完整提交列表可以在这里找到 here.
新功能
- 能够禁用用户输入(
setUserInputEnabled
,isUserInputEnabled
)
API 更改
- ViewPager2 类最终
错误修复
FragmentStateAdapter
稳定性修复
版本 1.0.0-alpha01
2019 年 2 月 7 日
androidx.viewpager2:viewpager2 1.0.0-alpha01
已发布。这是 ViewPager2 的第一个版本。
新功能
- 与前身
android.support.v4.view.ViewPager
(VP1) 相比- 支持从右到左 (RTL) 布局
- 垂直方向支持
notifyDataSetChanged
具有完全功能(已解决 VP1 错误)
API 更改
FragmentStateAdapter
替换了FragmentStatePagerAdapter
RecyclerView.Adapter
替换了PagerAdapter
registerOnPageChangeCallback
替换了addPageChangeListener
已知问题
- clipToPadding
- 没有 fakeDrag
- JavaDoc
- 与方向平行的嵌套滚动
- 没有屏幕外限制控制
- 需要更好的 TabLayout 集成
- 没有 pageWidth 设置器(强制为 100%/100%)
- 页面转换器:没有硬件/软件层选择;没有反向绘制顺序
- 在当前页面之前插入页面时,保持当前项目可见
- 键盘导航需要改进
FragmentStateAdapter
稳定性/性能改进即将推出