fragment生命周期

news2024/11/6 9:33:22

fragment生命周期

在这里插入图片描述

onAttach()始终在任何Lifecycle 状态更改之前调用,所以onAttach()onCreate()之前调用。

onAttach():

  • Fragment 被附加到 Activity 时调用。在这个阶段,Fragment 可以获取 Activity 的上下文。

onCreate():

  • Fragment 创建时调用。通常用于初始化一些非 UI 相关的逻辑,比如创建 ViewModel 或准备数据。
  • 初始化与Fragment视图无关的变量

onCreateView():

  • Fragment 创建并返回其关联的视图。在此阶段,可以通过 LayoutInflater 创建和配置 Fragment 的 UI。

onViewCreated():

  • Fragment 的视图被创建后调用。在这个方法中,你可以执行与视图相关的逻辑,比如设置监听器、初始化数据等。
  • 初始化视图内各个控件

onStart():

  • Fragment 对用户可见时调用。此时,Fragment 的 UI 还在后台,未完全显示。

onResume():

  • Fragment 完全对用户可见并可以交互时调用。这是 Fragment 活跃状态的开始。

可以对Lifecycle进行监听 然后做一些操作

 @Override
    public void onAttach(@NonNull @NotNull Context context) {
        super.onAttach(context);
      //requireActivity() 返回的是宿主activity
       requireActivity().getLifecycle().addObserver(new LifecycleEventObserver() {
      @Override
      public void onStateChanged(@NonNull @NotNull LifecycleOwner source, @NonNull @NotNull Lifecycle.Event event){
                if (event.getTargetState() == Lifecycle.State.CREATED){
                  //在这里任你飞翔
                    
                   requireActivity().getLifecycle().removeObserver(this);  //这里是删除观察者
                }
           }
       });
    }

使用FragmentTransaction-生命周期与页面跳转

1.当你使用 FragmentTransaction 在同一个 Activity 中切换 Fragment 时,生命周期的表现取决于你是使用 replace 还是 add / hide / show

replace() 示例

  • 当你使用 replace() 切换 Fragment 时,旧的 Fragment 会完全被销毁,新 Fragment 会按照全新的生命周期开始。

例如:从 FragmentA 切换到 FragmentB

  • FragmentAonPause() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach()
  • FragmentBonAttach() -> onCreate() -> onCreateView() -> onViewCreated() -> onStart() -> onResume()

add() / hide() / show() 示例

  • 如果你使用 add()hide()show() 进行 Fragment 切换,Fragment 并不会被销毁,而是只是进入不可见状态。

例如:从 FragmentA 切换到 FragmentB

  • FragmentAonPause() -> onStop() (不会销毁视图)
  • FragmentBonAttach() -> onCreate() -> onCreateView() -> onViewCreated() -> onStart() -> onResume()
  • 如果你再切换回 FragmentA,它会调用:onStart() -> onResume()

2.Fragment 跳转到另一个 Activity

当你从一个 Fragment 进行页面跳转,启动新的 Activity 时,当前 Fragment 会进入暂停和停止阶段,但通常不会被销毁。

例如,从 FragmentA 启动 ActivityB

  • FragmentAonPause() -> onStop()(仍然保留视图,等待用户返回)

当用户从 ActivityB 返回时:

  • FragmentAonStart() -> onResume()

按下返回键回到之前的 Fragment:

如果你在 FragmentTransaction 中将操作加入回退栈(addToBackStack()),当你按下返回键时,前一个 Fragment 会被重新显示,而当前 Fragment 则被销毁或隐藏,具体取决于之前的切换方式。

例如:从 FragmentB 返回到 FragmentA

  • FragmentBonPause() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach()
  • FragmentAonStart() -> onResume()

使用Jetpack 的 Navigation 组件-生命周期与页面跳转

Navigation 通过导航图 (NavGraph) 和 NavController 来管理 Fragment 的跳转和状态。

1.从一个 Fragment 导航到另一个 Fragment

假设从 FragmentA 导航到 FragmentB

FragmentA -> FragmentB 的生命周期:

  • FragmentA 的生命周期变化

    • onPause(): 当 FragmentA 开始从前台离开(但仍然可见),会调用此方法。
    • onStop(): 当 FragmentB 成功展示后,FragmentA 将进入后台,此时 FragmentA 不再可见。

    使用 Navigation 组件时,FragmentA 通常不会被销毁(即 onDestroyView()onDestroy() 不会立即被调用),而是保留在内存中。如果返回到 FragmentA,它会直接从 onStart()onResume() 恢复。

  • FragmentB 的生命周期变化

    • onAttach(): FragmentB 被添加到 Activity 上时调用。
    • onCreate(): 在 FragmentB 初始化时调用。
    • onCreateView(): 为 FragmentB 创建视图。
    • onViewCreated(): 当视图创建完成后,执行与 UI 相关的逻辑。
    • onStart(): FragmentB 开始进入前台并对用户可见。
    • onResume(): FragmentB 完全对用户可见并开始交互。

2.当从 FragmentB 返回到 FragmentA(假设 FragmentA 已加入回退栈)时:

  • FragmentB 的生命周期变化
    • onPause(): 当 FragmentB 开始离开前台时调用。
    • onStop(): 当 FragmentA 成功展示后,FragmentB 进入后台。
    • onDestroyView(): 当 FragmentB 的视图被销毁时调用。FragmentB 通常会调用 onDestroyView(),但在某些情况下它的实例可能保留在内存中,直到系统需要回收内存。
    • onDestroy()onDetach(): 当 FragmentB 完全从 Activity 中移除时调用。
  • FragmentA 的生命周期变化
    • onStart(): 当返回到 FragmentA 后,它的视图开始可见。
    • onResume(): 当 FragmentA 完全恢复到前台并开始交互。
    • 如果 Fragment 被回收(如系统内存紧张),当再次导航回该 Fragment 时,Fragment 会重新创建,调用 onCreate()onCreateView() 等方法。

自动管理回退栈:Jetpack Navigation 自动处理导航和回退,不需要手动调用 addToBackStack()popBackStack()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2065850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

旅游巴士(bus)【CSPJ2023】

题目描述 小Z 打算在国庆假期期间搭乘旅游巴士去一处他向往已久的景点旅游。 旅游景点的地图共有n 处地点,在这些地点之间连有m 条道路。其中1 号地点为景区入口,n 号地点为景区出口。我们把一天当中景区开门营业的时间记为0 时刻,则从0 时刻…

[大模型]Conda在线安装-Langchain-Chatchat-V0.3

文章目录 官方仓库地址历史问题 使用conda在线安装启动项目疑问解答为什么运行命令是chatchat? 移动conda与重命名conda 官方仓库 地址 https://github.com/chatchat-space/Langchain-Chatchat历史问题 问题中可能包含着旧版本(Langchain-Chatchat-V0…

打通Vue3+Flask(python3)+Mysql-实现简单数据交互

一、需要准备的工具 下载python3,Vscode,pycharm(这里用的社区版),phpstudy_pro,Node.js(建议下载长期支持版本,版本不宜过低,比如18,20),Vue.js…

LearnOpenGL——HDR、Bloom学习笔记

LearnOpenGL——HDR、Bloom学习笔记 HDR一、基本概念二、浮点帧缓冲 Floating Point Framebuffer三、色调映射 Tone MappingReinhard色调映射曝光色调映射 Bloom一、提取亮色二、高斯模糊三、将两个纹理进行混合 HDR 一、基本概念 显示器被限制只能显示0.0-1.0的颜色&#xf…

“AI+Security”系列第2期(四):AI/机器学习供应链攻击

近日,由安全极客、Wisemodel 社区和 InForSec 网络安全研究国际学术论坛联合主办的“AISecurity”系列第二期线上活动如期举行。此次活动的主题为“对抗!大模型自身安全的攻防博弈”,旨在深入探讨和分析人工智能和机器学习领域中的安全问题。…

武汉流星汇聚:亚马逊返校季学习用品热销,精准布局助力卖家成功

随着夏日的余温逐渐消散,新学期的钟声悄然临近,家长与学生们纷纷投入到新学期的准备工作中,而亚马逊作为全球领先的电商平台,再次迎来了学习用品销售的火爆季节。数据显示,过去30天内,“back to school”&a…

罗德与施瓦茨(RS)RTP164、RTP134,RTP084,RTP064示波器

罗德示波器系列RTP164租赁RTP134收购RTP084/RTP064/RTP034 概述 数字示波器是数据采集,A/D转换,软件编程等一系列的技术制造出来的高性能示波器,是电子类学科设计、制造和维修产品过程中不可或缺的工具。R&SRTP164示波器可以提供16GHz的…

U盘安装Ubuntu24.04,乌邦图,UltralISO

文章目录 前言通过UltraISO,制作启动U盘下载镜像制作工具UltraISO(软碟通)下载ubuntu镜像文件制作启动U盘 安装ubuntu设置root密码,并登陆root 前言 在Ubuntu作为主流的linux系统,有时候使用VMware安装使用,总归有一定的性能损耗…

深度学习 --- VGG16各层feature map可视化(JupyterNotebook实战)

VGG16模块的可视化 VGG16简介: VGG是继AlexNet之后的后起之秀,相对于AlexNet他有如下特点: 1,更深的层数!相对于仅有8层的AlexNet而言,VGG把层数增加到了16和19层。 2,更小的卷积核!…

大数据-98 Spark 集群 Spark Streaming 基础概述 架构概念 执行流程 优缺点

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

C语言与Python的区别

一、言语类型Python是一种基于解说器的言语,解说器会逐行读取代码;首先将Python编译为字节码,然后由大型C程序解说;C是一种编译言语,完好的源代码将直接编译为机器代码,由CPU直接履行。 二、内存办理Python…

寄蜉蝣于天地,渺沧海之一粟

工具 1、Zulip 一个开源的群聊软件,有服务端和各种平台的客户端。 2、win-vind 这个工具为 Windows 系统提供 Vim 风格的快捷键,也可以把它当作 Windows 的快捷键设定器。 3、canvas-confetti 在网页上抛洒五彩纸屑的 JS 库。 4、WR.DO 一个开源的 W…

让老周都道歉的360手表,难道是AI模型的锅吗?

360集团创始人、董事长周鸿祎在微博发文,对360儿童手表出现错误问答一事致歉。周鸿祎表示,今天在网上看到视频反映我们某型号的儿童手表出现错误的问答,给用户带来不适,我们表示真诚的歉意。 经过快速检查,出现问题的这…

快手主站前端工程化探索:Gundam 脚手架在新春除夕项目中的实践与展望

一、背景与目标 1.1 背景 Gundam 作为快手主站前端的脚手架,成立于2022年底。当时主站前端的整体工程化建设,从开发准备阶段到开发、联调、测试、部署、运维整个全流程, 其中偏后链路的持续集成和持续部署、错误监控排障,依赖于…

中科服务器磁盘未断电状态被人拔插导致raid故障,安装系统找不到系统盘 修复raid再次安装系统成功

1,根据提示按del进入bios 直接回车 改成good状态保存(多块盘的话重复此操作即可,直到让盘的状态显示good或者online) 然后回到上级导入raid信息 raid信息导入 设置成yes,然后保存退出 然后他会自己同步数据&…

SSM健康生活博客小程序—计算机毕业设计源码23497

摘 要 本文设计了一种基于SSM框架的健康生活博客小程序,为人们提供了运动视频教学、博客信息分享,用户能够方便快捷地查看资讯、搜索健康方面的相关信息、还能发布个人生活博客等。健康生活博客小程序采取面对对象的开发模式进行软件的开发和硬体的架设&…

基于x86 平台opencv的图像采集和seetaface6的性别识别功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.2 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的性别识别功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的性别识别模块从而实现…

未来城市的科技展望

未来城市,‌将是科技与人文深度融合的产物,‌展现出一个全方位智能化、‌绿色生态且可持续发展的全新面貌。‌随着物联网、‌人工智能等技术的飞速发展,‌未来城市的轮廓逐渐清晰,‌它将为我们带来前所未有的生活体验。‌ 在未来…

Linux驱动学习之点灯(六,利用平台设备总线)

平台设备总线 平台设备总线是内核虚拟的一条总线,早期没有设备树时,通过名字匹配设备信息,如今有设备树通过设备树里的complitable属性匹配,下图是平台设备总线的结构体描述。 much函数是完成信息匹配的, 总线就是使用…

Python 编程 之 tkinter : 导航栏与局部页面切换

import tkinter as tk class App: def __init__(self, root): self.root root self.root.title("导航栏与局部页面切换") self.root.geometry(800x500)self.root.minsize(width800, height300)# 创建导航栏 self.navbar tk.Frame(self.root, bggray) self.n…