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 动态添加(通过代码)

这是最常用的方式,通过 FragmentManager 和 FragmentTransaction 来实现。

  • 核心步骤:
    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 实例,通过 LiveData 或 StateFlow 观察数据变化。
  • Fragment Result API:适用于简单的单向数据传递,使用 setFragmentResult 发送结果,setFragmentResultListener

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

    接收结果。

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

最佳实践与注意事项

  • 使用 FragmentContainerView:相比于 FrameLayout,FragmentContainerView 能够更好地处理 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

相关推荐

  • 如何使用IDEA远程调试,怎么设置远程调试参数

    远程调试的本质是让本地IDE的调试器通过JDWP协议与远程JVM建立连接,实现本地代码与远程运行环境的同步断点调试,其核心在于配置正确的JVM参数与IDEA调试器设置,idea远程调试端口配置与核心步骤远程调试的配置过程并不复杂,但每一步都依赖精确的指令,忽略任何细节,比如端口号冲突或防火墙规则,都会导致连接失……

    2026年8月17日
    700
  • inverse矩阵库与颜色矩阵的关系是什么,怎么用

    inverse矩阵库是前端处理颜色矩阵求逆运算的轻量级JavaScript工具,它把复杂的矩阵取反逻辑封装成几行可调用的API,让你在图像滤镜、颜色校准和CSS滤镜还原场景中不再手推公式,先搞懂颜色矩阵到底是什么颜色矩阵不是某个库的发明,它是图形学里过了几十年还在用的经典结构,行业共识认为,任何线性颜色变换都可……

    2026年8月20日
    600
  • IsNumeric_字符集判断

    IsNumeric_字符集判断的核心结论:它只能告诉你”这段字符能不能被解析成数字”,这件事和真正的类型转换之间隔着一条巨大的鸿沟,很多人在写表单校验、批量导入、接口参数过滤时,第一反应就是掏出 IsNumeric 来兜底,它确实快,也确实方便,但字符集判断的边界比你想象的宽得多,你以为是”请出示身份证号”,它……

    2026年8月20日
    400
  • 服务器返回给客户端什么消息

    服务器返回给客户端的消息主要由状态码(Status Code)、响应头(Response Headers)和响应体(Response Body)三个核心部分组成,它们共同构成了客户端理解服务器处理结果的完整语义,服务器返回404和500有什么区别:深入理解HTTP状态码在网络通信中,状态码是服务器向客户端传递……

    2026年7月13日
    7700
  • AI大模型是什么?AI大模型有哪些应用场景

    基于AI的大模型正在从单纯的文本生成工具,进化为能够深度理解业务逻辑、执行复杂任务并自主决策的企业级智能中枢,其核心价值在于通过自动化工作流显著降低人力成本并提升决策效率,过去几年,我们见证了大语言模型(LLM)从“聊天机器人”到“生产力助手”的惊人跨越,到了2026年,这一技术已经不再是科技公司的专属玩具,而……

    2026年6月14日
    5000
  • iOS应用如何高效集成云数据库,有哪些方法?

    iOS应用集成云数据库的核心在于选择与业务场景匹配的实时后端服务,Firebase、Supabase和腾讯云是国内中小团队最常用的方案,关键看数据结构、同步需求和预算,iOS云数据库选型对比:哪些因素最关键选型时多数开发者会纠结是直接使用原生云数据库产品,还是自己搭建后端,行业共识认为,没有绝对的好坏,只有适合……

    2026年8月1日
    200
  • 哪款翻译API最精准好用,有哪些免费好用的机器翻译接口?

    翻译的API是连接全球化业务的核心引擎,选择高并发、低延迟且支持多语言微调的接口,是企业实现自动化跨语言沟通的最优解,翻译的api哪个好用?选型核心指标解析在数字化出海浪潮中,翻译API已不再是简单的文字转换工具,而是企业业务流程自动化的基础设施,面对市场上琳琅满目的接口服务,盲目选择往往导致业务上线后出现翻译……

    2026年7月14日
    500
  • Filezilla连不上云服务器怎么办?云服务器配置Filezilla教程

    FileZilla Server作为Windows平台下轻量级FTP解决方案,虽在2026年面临SFTP协议普及的挑战,但在内网文件共享、传统业务兼容及零成本部署场景中,依然是性价比极高的首选工具,在云计算与容器化技术大行其道的今天,许多开发者和管理员依然对传统的FTP协议抱有复杂的情感,SFTP和HTTPS因……

    2026年7月9日
    11500
  • ip数据库 mysql _Mysql数据库

    在MySQL中管理IP数据库,核心是使用INT UNSIGNED或VARBINARY存储IP地址,配合B-tree索引实现高效查询,千万级数据量下毫秒级响应,为什么选择MySQL作为IP数据库的存储方案在日志分析、地理位置服务、流量监控等场景中,IP数据库的存储和查询是基础需求,相比Redis全内存方案成本较高……

    2026年8月20日
    400
  • 为什么IE11浏览器下载对象时提示无法下载,怎么解决?

    IE11浏览器下载对象时提示“对象无法下载”,问题通常出在安全设置过高、缓存损坏或ActiveX控件被禁用,通过调整设置或重置浏览器即可解决,不少用户在使用IE11下载文件或文档时,点击后弹窗一句话“对象无法下载”,页面没有反应,这个提示很模糊,但实际指向几个常见故障点,大多数情况下通过手动调整就能恢复下载功能……

    2026年8月7日
    2600

发表回复

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