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 现在会正确填充 CollectionInfoCollectionItemInfo,这些信息是 RecyclerView 1.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 更改

错误修复

  • 修复了窗口插图的分发,所有页面现在都获得相同的插图。 (I47fef)

1.1.0-alpha01 版本

2020 年 4 月 1 日

androidx.viewpager2:viewpager2:1.1.0-alpha01 版本已发布。 1.1.0-alpha01 版本包含这些提交。

此版本伴随着 RecyclerView 1.2.0-alpha02 中的更改,通过填充 CollectionInfoCollectionItemInfo 来完成,这些信息 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 版本已发布。 此版本中包含的提交可在此处找到 此处

错误修复

  • 修复了 FragmentStateAdapterFragment 后退堆栈方面存在的边缘情况问题。 (b/139095195)
  • 修复了 EditText 在某些属性配置情况下,在键入/聚焦时会导致滚动/页面跳跃的问题。 (b/138044582, b/139432498)
  • 修复了 ItemDecoration 实例方面存在的问题,以及用于解决过度滚动指示器定位问题的变通方法。 (b/139012032)
  • 修复了其他组件中的许多问题,使其能更好地与 ViewPager2 配合使用:RecyclerViewNestedScrollViewNavigation

1.0.0-beta03 版本

2019 年 8 月 7 日

androidx.viewpager2:viewpager2:1.0.0-beta03 版本已发布。 此版本中包含的提交可在此处找到 此处

错误修复

  • 修复了 FragmentStateAdapter 在瞬态 Fragment 状态方面存在的问题。 b/134246546
  • 修复了在平滑滚动期间更改数据集时出现的 currentItemscrollState 问题(已解决边缘情况)。 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_RIGHTACTION_PAGE_DOWN 等。

API 更改

  • FragmentStateAdapter:非主项目的 Fragment 被限制为 STARTED,并且它们的 menuVisibility 设置为 false。
  • PageTransformerMarginPageTransformerCompositePageTransformerposition 文档已修复。

错误修复

  • 修复了更改数据集/适配器后 currentItem 的问题。
  • 修复了使用 offscreenPageLimitMarginPageTransformer 问题。
  • 修复了在 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 更改

  • orientationisUserScrollable 属性不再是 SavedState 的一部分
  • saveStaterestoreState 方法在 FragmentStateAdapter 中变为 final
  • ViewPager2.OrientationViewPager2.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.

新功能

  • 能够禁用用户输入(setUserInputEnabledisUserInputEnabled

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 稳定性/性能改进即将推出