Fragments怎么使用才正确,Android Fragment生命周期如何管理?

Android Fragments 详解指南

Fragment(碎片) 是 Android 开发中的一个核心组件,它可以被视为 Activity 界面中的一个“模块化部分”,Fragment 具有自己的生命周期,并且可以被添加到 Activity 中,也可以从其中移除。

为什么需要 Fragment?

Fragment 的引入主要是为了解决屏幕适配界面复用的问题:

Android零基础入门到精通之Fragment的使用方法
加载中
Android零基础入门到精通之Fragment的使用方法
  • 多面板布局:在平板电脑等大屏设备上,可以在一个界面显示两个 Fragment(如左侧列表,右侧详情);而在手机上则将它们分为两个独立的 Activity。
  • 模块化开发:将复杂的界面拆分成多个独立的部分,提高代码的可维护性和可复用性。
  • 动态界面管理:可以在运行时动态地添加、删除或替换界面内容,而无需重启整个 Activity。

Fragment 的生命周期

Fragment 的生命周期与 Activity 紧密相关,但它有自己的特有状态,重点关注以下阶段:

  • onAttach()

    Fragments怎么使用才正确,Android Fragment生命周期如何管理?

    :Fragment 与 Activity 建立关联。

  • onCreate():初始化 Fragment(不涉及 UI)。
  • onCreateView()关键步骤,在此方法中加载 XML 布局并返回 View 实例。
  • onViewCreated():View 创建完成后调用,适合在此进行 findViewById 或设置监听器。
  • onPause() / onStop():用户离开 Fragment 时调用。
  • onDestroyView():Fragment 的视图被销毁,但 Fragment 实例仍然存在。
  • onDetach():Fragment 与 Activity 完全脱离。

如何使用 Fragment

1 静态添加(通过 XML)

直接在 Activity 的布局文件中使用 <fragment>FragmentContainerView 标签,这种方式在编译时就确定了,无法在运行时动态更改。

2 动态添加(通过代码)

这是最常用的方式,通过 FragmentManagerFragmentTransaction 来实现。

  • 核心步骤
    1. 在布局中定义一个容器(如

      Fragments怎么使用才正确,Android Fragment生命周期如何管理?

      FrameLayout)。

    2. 获取 supportFragmentManager
    3. 开启事务 beginTransaction()
    4. 调用 replace()add()
    5. 调用 commit() 提交更改。

代码示例:

val fragment = HomeFragment()
supportFragmentManager.beginTransaction()
    .replace(R.id.fragment_container, fragment)
    .addToBackStack(null) // 将操作添加到返回栈,点击返回键可回退
    .commit()

Fragment 之间的通信

Fragment 不应该直接互相调用,因为这会造成强耦合,推荐以下三种通信方式:

  • ViewModel (推荐):使用 Activity 范围的 ViewModel,两个 Fragment 共享同一个 ViewModel 实例,通过 LiveDataStateFlow 观察数据变化。
  • Fragment Result API:适用于简单的单向数据传递,使用 setFragmentResult 发送结果,setFragmentResultListener

    Fragments怎么使用才正确,Android Fragment生命周期如何管理?

    接收结果。

  • 接口回调 (传统方式):Fragment 定义一个接口,由 Activity 实现该接口,再通过接口将数据传递给另一个 Fragment。

最佳实践与注意事项

  • 使用 FragmentContainerView:相比于 FrameLayoutFragmentContainerView 能够更好地处理 Fragment 的生命周期和动画。
  • 避免在 Fragment 中持有 View 的强引用:在 onDestroyView() 中将 View 绑定(如 Binding 类)置为 null,防止内存泄漏。
  • 优先使用 Navigation 组件:对于复杂的页面跳转,建议使用 Jetpack Navigation 库,它将 Fragment 的跳转逻辑可视化,并简化了 FragmentManager 的操作。
  • 区分 add() 和 replace()
    • add():将新 Fragment 叠加在旧 Fragment 之上,旧的仍处于 RESUMED 状态。
    • replace():先移除旧的,再添加新的,旧的会执行 onDestroyView

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/487723.html

(0)
服务器发送给客户端的线程休眠怎么实现,Socket通信线程休眠怎么写?
上一篇 2026年7月12日 16:26
如何查找Linux Shell CHM手册,Linux怎么打开chm文件?
下一篇 2026年7月12日 16:27

相关推荐

  • ios ui自动化测试工具_功能列表

    iOS UI自动化测试工具的核心功能集中在元素定位、脚本录制、跨平台支持和高质量报告,各工具在这几个维度上差异明显,选型时需结合项目场景和团队技术栈,iOS UI自动化测试工具有哪些?主流工具功能一览目前市面上主流的iOS UI自动化测试工具分为原生框架和第三方框架,原生框架以XCUITest为代表,第三方框架……

    2026年8月20日
    300
  • ip和域名绑定_绑定域名

    IP地址与域名的绑定,本质是通过DNS解析设置将域名指向服务器IP,这是网站可被访问的基础操作,也是区别服务器运维入门与资深的关键分水岭,域名绑定ip地址怎么设置?从解析到配置的完整流程把域名绑到IP上,听起来简单,但每一步都涉及底层逻辑,如果你只是添加了一条A记录就以为完事,那大概率会在浏览器里看到“无法访问……

    2026年8月17日
    700
  • 如何用iframe和ajax实现简单上传?PUT上传教程

    在前端文件上传的实践中,iframe上传、Ajax上传和基于PUT方法的简单上传是三种核心方案,其中iframe上传擅长跨域无刷新,Ajax上传提供丰富的控制能力,而PUT上传则直接对接RESTful接口,正确选用它们能显著提升开发效率,iframe上传与ajax上传区别:从表单到异步iframe上传的跨域接力……

    2026年8月6日
    1200
  • 如何通过ip addr配置IP地址并设置IP库,Linux静态IP配置的详细步骤是什么?

    在 Linux 网络配置中,ip addr 命令用于临时设置 IP 地址,而配置 IP 库(如 /etc/network/interfaces 或 /etc/sysconfig/network-scripts/ifcfg-eth0)则是让这些配置持久化的唯一方法,本文详细讲解 ip addr 配置ip 的操作步……

    2026年7月31日
    600
  • ioctl函数错误码有哪些常见类型及解决方法?,如何解决?

    ioctl函数返回错误码是设备驱动开发中最关键的调试线索,直接映射系统调用失败的根本原因,理解其值能让你在几分钟内定位问题而非几小时,ioctl返回值错误怎么排查:从基础到实战错误码的返回机制ioctl系统调用成功后返回0,失败时返回-1并设置errno全局变量,errno值对应具体错误码,如-EINVAL(2……

    2026年8月20日
    300
  • AI大模型RAG学习难吗?RAG技术如何落地应用

    AI大模型RAG学习的关键在于掌握“检索增强生成”的核心逻辑,通过外挂知识库解决大模型幻觉问题,实现企业级私有数据的精准问答与智能应用落地,很多人一听到RAG(检索增强生成),第一反应是觉得技术门槛高不可攀,或者认为必须拥有顶尖的算法团队才能玩转,RAG的本质非常直观,它就像给一个博学的助手配备了一个随时可查的……

    2026年6月14日
    3200
  • 如何限制指定IP地址访问自己的FTP服务器?,如何设置

    要限制指定IP地址访问FTP服务器上的存储桶,核心方法是配置FTP服务本身的IP白名单,并结合系统防火墙规则,对于云存储桶,直接使用其内置的IP白名单功能,两种方式都能有效控制访问来源,降低数据泄露风险,为什么需要限制IP访问FTP服务器FTP协议默认不加密,传输过程中账号密码容易被截获,如果FTP服务器暴露在……

    2026年8月2日
    600
  • 为什么不能定义包含多个字段的RECORD类型常量,怎么解决?

    is_null()_U0100035错误的核心原因是Oracle PL/SQL中不允许定义包含多个字段的RECORD类型常量,你需要改用变量或使用单字段RECORD来绕过这一限制,is_null()_U0100035错误怎么解决:RECORD常量多字段问题这个错误通常出现在使用is_null函数检查RECORD……

    2026年8月5日
    700
  • IIS7在七层独享型ELB下如何获取真实IP,步骤是什么?

    IIS7在七层独享型ELB转发下获取客户端真实IP,核心答案是启用ARR模块并配置X-Forwarded-For头传递,配合修改注册表与IIS变量映射即可完成,为什么七层独享型ELB转发下IIS7拿不到真实IP先看一个典型场景:你的网站部署在云服务器上,前面挂着一台七层独享型ELB,用户访问时,请求先打到ELB……

    AI资讯 2026年8月9日
    700
  • 大模型的瓶颈是什么?大模型技术发展趋势

    大模型当前的核心瓶颈并非算力不足,而是上下文窗口限制、幻觉问题以及高昂的推理成本,这导致其在处理超长文档、高精度逻辑推理及大规模并发部署时面临严峻挑战,很多人误以为大模型已经无所不能,只要把数据喂进去就能自动产出完美结果,事实并非如此,当你尝试让一个模型分析几百页的合同,或者要求它进行多步复杂的数学推导时,往往……

    2026年6月20日
    3400

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注