ViewPager

ViewPager 是一个布局管理器,可用于实现手势导航。 通过手势导航,用户可以向左和向右轻扫浏览数据页。 本指南介绍如何使用带或不带片段的 ViewPager 实现手势导航。 还介绍了如何使用 PagerTitleStrip 和 PagerTabStrip 添加页面指示器。

概述

应用开发中的一个常见场景是需要为用户提供同级视图之间的手势导航。 在此方法中,用户向左或向右轻扫以访问内容页面(例如,在安装向导或幻灯片放映中)。 可以使用 Android 支持库 v4 中提供的 ViewPager 小组件创建这些轻扫视图。 ViewPager 是一个由多个子视图组成的布局小组件,其中每个子视图构成布局中的一个页面:

Screenshots of TreePager app with horizontal swipe example

通常,ViewPager片段结合使用;但在某些情况下,可能希望使用 ViewPager 而不增加 Fragment 的复杂性。

ViewPager 使用适配器模式提供要显示的视图。 此处使用的适配器在概念上与 RecyclerView 使用的适配器类似 - 由你提供 PagerAdapter 的一个实现来生成 ViewPager 向用户显示的页面。 ViewPager 显示的页面可以是 ViewFragment。 当显示 View 时,适配器会对 Android 的 PagerAdapter 基类进行子类化。 如果显示 Fragment,则适配器对 Android 的 FragmentPagerAdapter 进行子类化。 Android 支持库还包含 FragmentPagerAdapterPagerAdapter 的子类),以帮助处理将 Fragment 连接到数据的细节。

本指南演示了这两种方法:

  • 带视图的 ViewPager 中,开发了一个 TreePager 应用来演示如何使用 ViewPager 显示树木目录(落叶树和常绿树的图片库)的视图。 PagerTabStripPagerTitleStrip 用于显示有助于页面导航的标题。

  • 带片段的 ViewPager 中,开发了一个稍显复杂的 FlashCardPager 应用,用于演示如何使用带 FragmentViewPager 来生成应用,以闪存卡的形式呈现数学问题并响应用户输入。

要求

要在应用项目中使用 ViewPager,必须安装 Android 支持库 v4 包。 有关安装 NuGet 包的详细信息,请参阅演练:在项目中包括 NuGet

体系结构

以下三个组件对于通过 ViewPager 实现手势导航很有用:

  • ViewPager
  • 适配器
  • 寻呼指示器

下面概述了其中每个组件。

ViewPager

ViewPager 是一个布局管理器,它一次显示一个 View 的集合。 它的任务是检测用户的轻扫手势并根据需要导航到下一个或上一个视图。 例如,下面的屏幕截图演示了 ViewPager 根据用户手势从一张图像转换到下一张图像:

Closeup of TreePager app displaying a transition between Views

适配器

ViewPager 从适配器中拉取其数据。 适配器的任务是创建由 ViewPager 显示的 View,并根据需要提供它们。 下图演示了此概念 - 适配器创建并填充 View 并将它们提供给 ViewPager。 当 ViewPager 检测到用户的轻扫手势时,它会要求适配器提供要显示的相应 View

Diagram illustrating how the Adapter connects images and names to the ViewPager

在此特定示例中,每个 View 均由树木图像和树木名称构造而成,然后再传递到 ViewPager

寻呼指示器

ViewPager 可用于显示大型数据集(例如,图像库可能包含数百张图像)。 为了帮助用户浏览大型数据集,ViewPager 通常会附带一个显示字符串的寻呼指示器。 该字符串可能是图像标题、描述文字或只是当前视图在数据集中的位置。

有两个视图可以生成此导航信息:PagerTabStripPagerTitleStrip. 每个视图都在 ViewPager 顶部显示一个字符串,并且都从 ViewPager 的适配器中拉取其数据,以便它始终与当前显示的 View 保持同步。 它们之间的区别在于,PagerTabStrip 包含“当前”字符串的视觉指示符,而 PagerTitleStrip 则不包含(如这些屏幕截图所示):

Screenshots of the TreePager app with PagerTitleStrip and PagerTabStrip

本指南演示如何实现 ViewPager、适配器和指示器应用组件,并将其集成以支持手势导航。