Android基础(二)
Fragment
Fragment 是 Android 应用中的一种组件,用于构建灵活和可重用的用户界面。它可以嵌入到活动(Activity)中,并且具有自己的布局和行为。
使用 Fragment 在 Android 应用中有以下几个重要的理由:
- 模块化和复用性:Fragment 允许将应用界面拆分成多个独立的模块,每个 Fragment 负责自己的布局和逻辑。这样可以增加代码的模块化程度,提高复用性和维护性。可以在不同的活动中重用 Fragment,而不需要重复编写相同的代码。
- 界面的灵活性:使用 Fragment 可以让应用具备更大的灵活性,能够适配不同屏幕尺寸和方向的设备。通过动态添加、替换和移除 Fragment,可以根据用户需求和设备条件来调整和改变界面的组织结构。这对于支持平板电脑、分屏模式和多窗口等功能非常重要。
- 生命周期管理:Fragment 有自己的生命周期,它可以与宿主活动(Activity)进行独立的生命周期管理。这意味着 Fragment 可以在不同的生命周期阶段执行相应的操作,以便及时响应用户交互和设备状态的变化。例如,可以在 Fragment 的
onResume()
和onPause()
方法中处理后台任务的启动和暂停。 - 多任务处理:使用 Fragment 可以实现同时处理多个任务的界面。通过将不同功能的 Fragment 嵌入到同一个活动中,可以让用户同时进行多个任务,提高应用的效率和用户体验。例如,在聊天应用中,可以将聊天列表、聊天详情和输入框作为不同的 Fragment,同时显示在同一个活动中。
- 代码测试和维护:将界面的不同部分拆分成 Fragment 可以使代码更易于测试和维护。因为每个 Fragment 可以独立测试和调试,而不需要依赖整个活动。此外,当界面需求发生变化时,只需要修改对应的 Fragment,而不会影响其他部分的功能。
使用 Fragment 的基本步骤包括以下几个方面:
- 创建 Fragment 类:
- 创建一个继承自
androidx.fragment.app.Fragment
(或android.app.Fragment
)的 Java 类。 - 在类中实现必要的方法,例如
onCreateView()
用于加载布局文件、初始化界面等。
- 创建一个继承自
- 创建 Fragment 布局:
- 在 res 目录下的 layout 文件夹中创建一个 XML 布局文件,用于定义 Fragment 的界面。
- 在布局文件中添加视图组件和布局元素,可以与普通活动(Activity)的布局类似。
- 在活动中使用 Fragment:
- 在活动的布局文件中添加一个容器视图,例如
<FrameLayout>
、<LinearLayout>
等,用于容纳 Fragment。 - 在活动的 Java 代码中获取 FragmentManager 对象,可以通过
getSupportFragmentManager()
来获取 AndroidX 支持库中的 FragmentManager。
- 在活动的布局文件中添加一个容器视图,例如
- 进行 Fragment 事务操作:
- 使用 FragmentTransaction 类进行 Fragment 的添加、移除、替换等操作。
- 可以通过 FragmentTransaction 的方法来指定添加的位置、替换的目标、动画效果等选项。
- 处理 Fragment 交互:
- 可以在活动和 Fragment 之间进行数据传递和通信。
- 通过在 Fragment 类中定义公共方法,活动可以调用这些方法来与 Fragment 进行交互。
Fragment 与 Activity 之间的通信
可以通过以下几种方式实现:
- 使用接口(Interface):
- 在 Fragment 中定义一个接口,包含需要与 Activity 进行通信的方法。
- Activity 实现该接口,并在方法中实现相应的逻辑。
- 在 Fragment 中获取 Activity 的引用,然后调用接口方法进行通信。
- 直接引用 Activity:
- 在 Fragment 中获取对宿主 Activity 的引用,可以使用
getActivity()
方法。 - 通过获得的 Activity 引用,调用 Activity 中的公共方法或属性进行通信。
- 在 Fragment 中获取对宿主 Activity 的引用,可以使用
- 使用广播(Broadcast):
- 在 Fragment 中发送广播,包含通信的数据。
- 在 Activity 中注册广播接收器,并在接收器中处理来自 Fragment 的广播消息。
- 使用事件总线(Event Bus):
- 使用第三方库(如 EventBus、GreenRobot EventBus)创建全局的事件总线对象。
- 在 Fragment 中发布事件,包含通信的数据。
- 在 Activity 中订阅事件,并定义处理事件的逻辑。
- 使用ViewModel:
- 使用 Android 架构组件中的 ViewModel,将数据和逻辑从 Fragment 中抽离出来。
- ViewModel 可以在 Fragment 和宿主 Activity 之间共享数据,并且在配置变化等情况下保持数据的一致性。
Fragment的生命周期.
以下是 Fragment 的正确生命周期方法及其调用时机:
onAttach()
: 当 Fragment 被依附到 Activity 时调用,可以通过该方法获取所依附的 Activity 的引用。onCreate()
: 在 Fragment 创建时调用,可进行初始化操作,如变量的初始化、资源的加载等。onCreateView()
: 创建 Fragment 的视图层次结构,即加载布局文件,初始化界面控件等。onViewCreated()
: 在 onCreateView() 完成后立即调用,通常用于执行与视图相关的操作。onActivityCreated()
: 当与 Fragment 相关联的 Activity 的 onCreate() 方法执行完毕时调用。onStart()
: 可见生命周期开始时调用,表示 Fragment 可见但尚未获取用户焦点。onResume()
: Fragment 获取用户焦点,并开始接收用户交互事件。onPause()
: 当 Fragment 失去用户焦点时调用,表示不再接收用户交互事件。onStop()
: 不可见生命周期开始时调用,表示 Fragment 不再可见。onDestroyView()
: Fragment 的视图层次结构被销毁时调用,可清理资源。onDestroy()
: Fragment 被销毁时调用,可进行最终的清理操作。
的视图层次结构被销毁时调用,可清理资源。onDestroy()
: Fragment 被销毁时调用,可进行最终的清理操作。onDetach()
: Fragment 从 Activity 中分离时调用,释放与 Activity 的关联。