Android(安卓)片段

片段(Fragment)是 activity 的一部分,可以实现更模块化的 activity 设计。如果我们说,片段是一种子 activity,那就没有错。

以下是关于片段的要点:

  • 片段有自己的布局和行为,以及自己的生命周期回调。
  • 您可以在 activity 运行时在 activity 中添加或移除片段。
  • 您可以在单个 activity 中组合多个片段,以构建多窗格 UI。
  • 一个片段可以用于多个 activity。
  • 片段生命周期与其宿主 activity 的生命周期密切相关,这意味着当 activity 暂停时,activity 中可用的所有片段也将停止。
  • 片段可以实现没有用户界面组件的行为。
  • 在 Android 的蜂巢版本(API 版本 11)中,Android API 中添加了一些片段。

您可以通过扩展 Fragment 类来创建片段,您可以通过在 activity 的布局文件中将片段声明为 <fragment> 元素,将片段插入到 activity 布局中。

在引入片段之前,我们有一个限制,因为在一个给定的时间点,我们只能在屏幕上显示单个 activity。因此,我们无法分割设备屏幕并分别控制不同的部分。但随着片段的引入,我们获得了更大的灵活性,并消除了每次在屏幕上显示单个 activity 的限制。现在我们可以有一个 activity ,但每个 activity 可以由多个片段组成,这些片段将有自己的布局、事件和完整的生命周期。

下面是一个典型的例子,展示了如何将由片段定义的两个 UI 模块组合成一个 activity,用于平板电脑设计,但将其分离用于手机设计。

当在平板电脑大小的设备上运行时,应用程序可以在 activity A中 嵌入两个片段。然而,在手机大小的屏幕上,没有足够的空间容纳这两个片段,因此 a 只包含文章列表的片段,当用户选择一篇文章时,它启动 activity B,其中包含阅读文章的第二个片段。


片段生命周期

Android 片段有自己的生命周期,与 Android activity 非常相似。本节简要介绍了其生命周期的不同阶段。

下面是可以在片段类中重写的方法列表:

  • onAttach() - 片段实例与 activity 实例相关联。片段和 activity 未完全初始化。通常,您会在该方法中获得对使用片段进行进一步初始化工作的 activity 的引用。
  • onCreate() - 系统在创建片段时调用此方法。当片段暂停或停止后,您应该初始化要保留的片段的基本组件,然后再继续。
  • onCreateView() - 当片段第一次绘制其用户界面时,系统调用此回调。要为片段绘制 UI,必须从该方法返回 View 组件,该组件是片段布局的根。如果片段不提供 UI,则可以返回 null
  • onActivityCreated() - 创建主机 activity 时,在 onCreateView() 方法之后调用 onActivityCreated()。已创建活动和片段实例以及 activity 的视图层次结构。此时,可以使用 findViewById() 方法访问视图。实例在此方法中,您可以实例化需要 Context 对象的对象。
  • onStart() - onStart() 方法在片段可见时调用。
  • onResume() - 片段变为活动状态。
  • onPause() - 系统调用此方法作为用户离开片段的第一个指示。这通常是您应该提交应在当前用户会话之后持久化的任何更改的地方。
  • onStop() - 将通过调用 onStop() 来停止片段。
  • onDestroyView() - 调用此方法后片段视图将被销毁
  • onDestroy() - onDestroy() 调用以完成片段状态的最终清理,但不保证由 Android 平台调用。

如何使用片段?

创建片段的几个简单步骤:

  • 首先决定你想在一个 activity 中使用多少片段。例如,让我们使用两个片段来处理设备的横向和纵向模式。
  • 接下来,根据片段的数量,创建将扩展 Fragment 类的类。Fragment 类具有上述回调函数。您可以根据自己的要求覆盖任何功能。
  • 对应于每个片段,您需要在XML文件中创建布局文件。这些文件将具有已定义片段的布局。
  • 最后修改活动文件,根据您的需求定义替换片段的实际逻辑。

片段的类型

基本上,片段分为三个阶段,如下所示:

  • 单帧片段:单帧片段用于手机等手持设备,这里我们只能显示一个片段作为视图。
  • 列表片段:具有特殊列表视图的片段称为列表片段
  • 片段过渡:与片段事务一起使用。我们可以将一个片段移动到另一个片段。