当前位置: 首页 > news >正文

Android | Fragment

Android Fragment

Fragment 概念

Fragment 表示应用界面中可重复的一部分,Fragment 定义和管理自己的布局,具有自己的生命周期,并且可以处理自己的输入事件。fragment 不能独立存在,而是必须由 Activity 或另一个 fragment 托管。fragment 的视图层次结构会成为宿主的视图层次结构的一部分,或附加到宿主的视图层次结构。

Fragment 生命周期

在这里插入图片描述

  • 运行状态:当一个 Fragment 所关联的 Activity 正处于运行状态时,该 Fragment 也处于运行状态。
  • 暂停状态:当一个 Activity 进入暂停状态时(由于另一个未占满屏幕的 Activity 被添加到了栈顶),与它相关联的 Fragment 就会进入暂停状态。
  • 停止状态:当一个 Activity 进入停止状态时,与它相关联的 Fragment 就会进入停止状态,或者通过调用 FragmentTransactionremove()replace() 方法将 FragmentActivity 中移除,但在事务提交之前调用了 addToBackStack() 方法,这时的 Fragment 也会进入停止状态。总的来说,进入停止状态的 Fragment 对用户来说是完全不可见的,有可能会被系统回收。
  • 销毁状态Fragment 总是依附于 Activity 而存在,因此当 Activity 被销毁时,与它相关联的 Fragment 就会进入销毁状态。或者通过调用 FragmentTransactionremove()replace() 方法将 FragmentActivity 中移除,但在事务提交之前并没有调用 addToBackStack() 方法,这时的 Fragment 也会进入销毁状态。

Activity 中有的回调方法在 Fragmen 中基本都有,Fragment 还提供了附加的回调方法。

  • onAttach():当 FragmentActivity 建立关联时调用。
  • onCreateView():为 Fragment 创建视图(加载布局)时调用。
  • onActivityCreated():确保与 Fragment 相关联的 Activity 已经创建完毕时调用。
  • onDestroyView():当与 Fragment 关联的视图被移除时调用。
  • onDetach():当 FragmentActivity 解除关联时调用。

常见的 Fragment 生命周期变化有以下几种:

  • Fragment A 第一次被加载到屏幕上:onAttach()onCreate()onCreateView()onActivityCreated()onStart()onResume() 会依次执行。
  • Fragment AFragment B 替代,Fragment A 的变化情况:onPause()onStop()onDestroyView() 方法会得到执行,如果没有调用 addToBackStack() 方法,会进入销毁状态,onDestroy()onDetach() 方法就会得到执行。
  • 当上述情况改为在 Fragment A 没有被销毁的时按下 BACK,让 Fragment A 重新回到屏幕:onCreateView()onActivityCreated()onStart()onResume() 会依次执行。
  • 退出程序时:onPause()onStop()onDestroyView()onDestroy()onDetach() 方法会依次执行。

相关文章:

  • 可以找人帮忙做设计的网站/全网营销平台有哪些
  • 河南艾特网站建设公司/唯尚广告联盟平台
  • wordpress 个人简历/新手销售怎么和客户交流
  • 广东省建设工程协会网站/百度网址链接
  • 咨询行业网站开发/网店运营入门基础知识
  • b2c网站建设 广州/东莞网络优化哪家公司好
  • 代码随想录算法训练营第13天 239.滑动窗口最大值、347. 前 K 个高频元素
  • 2023-01-16 Dubbo+Zookeeper集成
  • 我的周刊(第074期)
  • WuThreat身份安全云-TVD每日漏洞情报-2023-01-16
  • 【Python学习】条件和循环
  • 寒假集训一期总结(一)–––思维训练
  • Rpc了解
  • 【开发心得】Spring Mail发送邮件
  • 编译基于armV8架构的opencv,并在rock3a开发板上运行
  • Unity | 序列化(Serialized)和反序列化(NonSerialized)是什么意思
  • C/C++路面导航系统[2023-01-16]
  • Leetcode:669. 修剪二叉搜索树(C++)