Fragment

一个 Fragment 表示应用 UI 中可重复使用的部分。Fragment 定义并管理其自己的布局,拥有其自己的生命周期,并且可以处理其自己的输入事件。Fragment 不能单独存在。它们必须由 Activity 或另一个 Fragment 托管。Fragment 的视图层级结构成为宿主视图层级结构的一部分,或 附加 到宿主视图层级结构。

模块化

Fragment 通过将 UI 划分为离散的块,为 Activity 的 UI 引入了模块化和可重用性。Activity 是放置应用用户界面周围全局元素的理想场所,例如导航抽屉。相反,Fragment 更适合定义和管理单个屏幕或屏幕一部分的 UI。

设想一个能响应各种屏幕尺寸的应用。在较大的屏幕上,您可能希望应用显示一个静态导航抽屉和一个网格布局中的列表。在较小的屏幕上,您可能希望应用显示一个底部导航栏和一个线性布局中的列表。

在 Activity 中管理这些变化是很笨拙的。将导航元素与内容分离可以使这个过程更易于管理。Activity 负责显示正确的导航 UI,而 Fragment 则显示具有适当布局的列表。

Two versions of the same screen on different screen sizes.
图 1. 同一屏幕在不同屏幕尺寸上的两个版本。左侧是一个大屏幕,其中包含由 Activity 控制的导航抽屉和由 Fragment 控制的网格列表。右侧是一个小屏幕,其中包含由 Activity 控制的底部导航栏和由 Fragment 控制的线性列表。

将 UI 划分为 Fragment 可以更轻松地在运行时修改 Activity 的外观。当您的 Activity 处于 STARTED 生命周期状态或更高状态时,可以添加、替换或移除 Fragment。您可以在由 Activity 管理的返回堆栈中记录这些更改,以便可以撤消这些更改。

您可以在同一个 Activity、多个 Activity 中,甚至作为另一个 Fragment 的子 Fragment 来使用同一个 Fragment 类的多个实例。考虑到这一点,只需为 Fragment 提供管理其自身 UI 所需的逻辑。避免在一个 Fragment 中依赖或操作另一个 Fragment。

后续步骤

有关 Fragment 的更多文档和资源,请参阅以下内容。

开始

更多主题

示例

视频