08 |「Fragment 」

前言

实践是最好的学习方式,技术也如此。

文章目录

    • 前言
    • 一、简介
      • 1、是什么
      • 2、为什么要有 Fragment
      • 3. Fragment 详细解释
    • 二、Fragment 与 Activity 的直观理解
    • 三、Fragment 的创建
      • 1、Fragment 的创建方式
      • 2、Fragment 的增删替查
        • 1) 替换(常见)
      • 3、Fragment 的数据传递
        • 1)Activity 向 fragment 传递数据
        • 2)fragment 向 Activity 传递数据
        • 3)fragment 之间传递数据

一、简介

1、是什么

  • Fragment 翻译过来为:片段、碎片;
  • Fragment 直观印象
    • 是一部分内容构成的片段,体现在屏幕上就是一块内容区域;页面区域直接是可以进行切换;整体上是存在于 Activity 上;

2、为什么要有 Fragment

  • 在 Fragment 之前,通常把一个 Activity 作为一个页面;
  • 随着页面元素的增加以及场景的复杂,单个页面已经不能满足需要,在屏幕上通常要同时展示多个区域,多个页面内容,这些内容的切换通常是整体的;
  • 为了让一个 Activity 上承载更多的内容,以及这些内容统一管理,引入了 Fragment;
  • 相对于 Activity,Fragment 更加轻量级一些,相当于一个子页面的概念;

3. Fragment 详细解释

  • 将一块内容区域封装在一起,统一管理,构成一个 Fragment
  • Fragment 是依附在 Activity 上而存在的;
  • 一个 Activity 中可以有个多个 Fragment,各个 Fragment 之间可以传递数据、互相切换;
  • FragmentActivity 类似,也有生命周期函数(onCreate、onPause、onDestory 等);
  • 一个 Fragment 从开始到结束的生命周期流程(因为 fragment 是依附于 Activity 存在的,因此 fragment 的生命周期会受到 Activity 生命周期的影响);
    • onAttach -> onCreate -> onCreateView -> onViewCreated -> onActivityCreated -> onStart -> onResume -> onPause ->onStop -> onDestoryView -> onDestroy -> onDetach
  • onCreate()

    • 创建 fragment 时调用,此时 fragment 的视图还没有创建,是 fragment 生命周期开始的地方;在这个阶段,fragment 正在被创建,这个阶段通常用于初始化那些不依赖于 fragment 视图的。
  • onCreateView()

    • fragment 生命周期中专门用于创建和设置 fragment 视图的阶段,在这个阶段,开发者通常会
      • 1)加载布局:通过 LayoutInflater 来加载布局文件,这是设置 fragment 视图的首要步骤;
      • 2)初始化视图组件:找到布局文件中的各个组件(如 TextViews, Buttons 等),并进行相应的设置或事件绑定 ;
      • 3)处理逻辑:根据传入的参数或应用的状态,调整视图的显示或初始化特定的数据;
  • onViewCreated()

    • 在视图创建完成后并返回给宿主Activity之后调用 ;
  • onActivityCreated

    • fragment 所在的 Activity 完成 oncreate() 时调用;
  • onStart

    • fragment 变得可见时调用;
  • onResume

    • fragment 可见且能够与用户交互时调用;
  • onPause

    • 用户即将离开 fragmentfragment 即将被停止时调用;
  • onstop

    • fragment 不再可见时调用;
  • ondestory

    • fragment 销毁时调用;
  • 过程

    • 调用 newInstance 方法:当通过 newInstance 方法创建一个 Fragment 实例时,实际上是调用了 Fragment 的构造方法并设置了相关的参数;在newInstance 方法内部,通过 setArguments 方法将参数传递给 Fragment 实例。
    • 生命周期方法
      • 当将创建的 Fragment 实例添加到 FragmentManager 并提交事务时,系统会管理Fragment的生命周期;
      • 此时,生命周期方法(例如onCreate、onCreateView等)会被系统自动调用;
      • 参数传递:在生命周期方法中,可以通过 getArguments 方法获取通过newInstance 传递的参数。这样设计的好处是,在 Fragment 销毁并重新创建时(例如屏幕旋转),Bundle 中的参数会被保留,不会丢失。

二、Fragment 与 Activity 的直观理解

  • Fragment 需要 Activity 作为它的框架去支持,多个 Fragment 之间可以进行相互切换,每切换一个 Fragment,当前的 Fragment 就会填充到当前 Activity 并进行呈现,其它的 Fragment 会隐藏或者被移除掉;
  • 每一个 Fragment 上面还可以有 子Fragment

三、Fragment 的创建

1、Fragment 的创建方式

  • 静态创建

    • 1)添加依赖
      • 包名(包要导对,和工程相匹配的包);
    • 2)使用 xml 代码引入 Fragment(在布局中直接写进去)
      • 创建一个 Fragment
      • 布局代码中用一个容器承接并绑定
        • 类比于 button ,用标签在布局中写好,在 Fragment 中的 Java 代码中进行绑定;
        • 标签:FragmentFragmentContainerView
    • 步骤总结
      • 在入口界面(Activity)-> 通过 button 点击进入承载 fragment 的 Activity,在承载 fragment 的 Activity的布局里面利用 <fragment 标签引入 fragment -> 创建 fragment 的 java 代码,通过在标签中加入 android:name 与 fragment 的 java 代码关联起来(中有实现对应 fragment 的 xml 文件的对应)
  • 动态创建

    • 添加依赖;
    • 创建一个 Fragment(Java 代码)和布局;
    • 布局代码中用一个容器( <androidx.fragment.app.FragmentContainerView)承接,但不直接在容器中绑定创建的 Fragment
    • 代码中,使用 FragmentManagerFragmentTranction 添加创建的 Fragment 到容器(呈现的 Activity)中;

2、Fragment 的增删替查

1) 替换(常见)
  • 替换的应用场景:页面上一般只会存在一个 fragment,添加一个新的 fragment 时,会将当前 fragment 隐藏或移除;
  • 替换包括的两个步骤
    • 1)将当前容器上的 Fragment 全部移除;
    • 2)添加新的 Fragment

3、Fragment 的数据传递

1)Activity 向 fragment 传递数据
  • 通过方法传递(基本的,通过编程语言的基本性质传递数据,没有涉及到 Android 层面)
    • 通过构造方法
      • 在承载fragment的Activity中创建 fragment 对象时调用其构造方法传递数据,将成员变量设置为传递的数据;
        Fragment fragment = Fragment.newInstance(0, firstPageApps);
        
    • 通过 Public 方法
      • 在承载 fragmentActivity 中创建 fragment 对象时调用 public 方法将成员变量设置为传递的数据;
  • 通过 Argument
    • 是 android 本身提供的向 fragment 传递数据的方式,可用来一次性传递复杂、大量的数据;
    • 通过 public setArguments(Bundle args) 传递数据; Bundle 是一种打包的数据,本质是一个键值对;
    • 通过 public Bundle getArguments() 接收数据;
  • 通过接口
    • 通过接口也是一种基于编程语言自身性质的数据通信方式,与 android 本身无关;
    • 本质上可以看作就是个观察者模式,即 两个对象,“被观察者 - 观察者”
      • 数据由A传到B,A就是被观察者,B就是观察者,B不必亲自观察(因为B不知道A啥时候数据进行变化啥时候需要往外传递数据),它可以派一个小兵替自己观察,当有了结果之后通知B即可,B对相应的数据变化进行展示即可,这个被派去的小兵就是接口;
2)fragment 向 Activity 传递数据
  • 通过 getActivity
    • 由于 Activity 是 fragment 的承载者,每个 fragment 都可以通过 getActivity() 方法获得承载它的 Activity 对象,从而可以调用这个 Activity 类中定义的方法, 进而向 Activity 传递数据;
  • 通过接口
3)fragment 之间传递数据
  • 通过 Activity 中转
    • 由于 Activity 是各个 fragment 的承载者,所以可以作为中间桥梁(作为底层的东西)为各个 fragment 传递数据 ;
    • 通过 Activty 与 fragment 之间传递数据可以知道,在 fragment 中可以通过 getActivity() 获得 Activity 对象;在 Activity 中可以通过 findFragmentById 或者 findFragmentByTag 找到指定的 Fragment。或者 Fragment 作为 Activity 的成员变量直接使用;
    • fragment 之间传递数据
      • fragmentA 向 fragmentB 传递数据,fragmentA 可以通过 getActivity() 拿到承载 fragmentB 的 Activity 对象,然后通过调用 findFragmentById 或者 findFragmentByTag 找到 fragmentB,找到后就可以调用 fragmentB 的方法,从而传递数据

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux - 进程控制

1、进程创建 1.1、fork函数初识 在linux中fork函数时非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程&#xff1b; #include <unistd.h> pid_t fork(void); 返回值&#xff1a;自进程中返回0&#xff0c;父进…

融资项目——OpenFeign的降级与熔断

当一个微服务调用其他微服务时&#xff0c;如果被调用的微服务因各种原因无法在规定时间内提供服务&#xff0c;则可以直接使用本地的服务作为备选&#xff0c;即进行降级熔断。 如之前所提到的微服务为例&#xff1a; 如果希望实现降级熔断&#xff0c;可以在本地创建一个实现…

Spring事务注解@Transactional的流程和源码分析

Spring事务简介 Spring事务有两种方式&#xff1a; 编程式事务&#xff1a;编程式事务通常使用编程式事务管理API实现&#xff0c;比如Spring提供的PlatformTransactionManager接口&#xff0c;使用它操控事务。声明式事务&#xff1a;注解式事务使用AOP&#xff08;面向切面…

【C++从0到王者】第五十站:B树

文章目录 一、内查找与外查找1.内查找2.外查找 二、B树概念三、B树的插入1.B树的插入分析2.B树插入总结3.插入代码实现4.B树满树和最空时候的对比5.B树的删除6.遍历B树7.B树的性能分析 一、内查找与外查找 1.内查找 像我们之前所用的在内存中的查找就是内查找 种类数据格式时…

IEEE754标准的c语言阐述,以及几个浮点数常量

很多年前&#xff0c;调研过浮点数与整数之间的双射问题&#xff1a; win7 intel x64 cpu vs2013 c语言浮点数精度失真问题 最近重新学习了一下IEEE754标准&#xff0c;也许实际还有很多深刻问题没有被揭示。 计算机程序设计艺术&#xff0c;据说这本书中也有讨论。 参考&…

如何将字体添加到 ONLYOFFICE 桌面编辑器8.0

作者&#xff1a;VincentYoung 为你写好的文字挑选一款好看的字体然而自带的字体列表却找不到你喜欢的怎么办&#xff1f;这只需要自己手动安装一款字体即可。这里教你在不同的桌面操作系统里的多种字体安装方法。 ONLYOFFICE 桌面编辑器 ONLYOFFICE 桌面编辑器是一款免费的办…

【C语言】终の指针(前篇)

个人主页点这里~ 指针初阶点这里~ 指针初阶2.0点这里~ 指针进阶点这里~ 终の指针 一、回调函数二、qsort函数1、整形比较2、结构数据比较①结构体②-> 的使用③结构数据比较 一、回调函数 回调函数就是⼀个通过函数指针调用的函数。 把一个函数的指针作为参数传递给另一…

@ResponseStatus

目录 概述&#xff1a; 用途&#xff1a; 参数&#xff1a; 注意事项&#xff1a; 自定义异常类&#xff1a; 底层原理&#xff1a; 概述&#xff1a; 在 Spring MVC 中&#xff0c;我们有很多方法来设置 HTTP 响应的状态码其中最直接的方法&#xff1a;使用 ResponseSt…

思维题(蓝桥杯 填空题 C++)

目录 题目一&#xff1a; ​编辑 代码&#xff1a; 题目二&#xff1a; 代码&#xff1a; 题目三&#xff1a; 代码&#xff1a; 题目四&#xff1a; 代码&#xff1a; 题目五&#xff1a; 代码&#xff1a; 题目六&#xff1a; 代码七&#xff1a; 题目八&#x…

分享关于如何解决系统设计问题的逐步框架

公司广泛采用系统设计面试&#xff0c;因为在这些面试中测试的沟通和解决问题的技能与软件工程师日常工作所需的技能相似。面试官的评估基于她如何分析一个模糊的问题以及如何逐步解决问题。测试的能力还包括她如何解释这个想法&#xff0c;与他人讨论&#xff0c;以及评估和优…

外包干了2年,技术退步明显

先说一下自己的情况&#xff0c;研究生&#xff0c;19年进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

docker部署若依项目

目录 目录 一、搭建局域 二、redis安装 1.创建目录 2. redis.conf修改 三、MySQL安装 1. 安装 2. 设置远程连接 3. 创建数据库 四、若依后端项目搭建 1. 切换到家目录 2. 上传jar包 3. 上传Dockerfile文件 4. 构建镜像 5. 运行容器 6. 查看运行情况 7. 测试(自己…

mysql bug( InnoDB: Error number 22),表突然不能读取

mysql bug&#xff08; InnoDB: Error number 22&#xff09;&#xff0c;表突然不能读取 bug最开始的bug&#xff1a;表突然不能读取关闭mysql容器&#xff0c;再次重启失败 解决方案不重建容器的几种可能措施重建容器重建如果懒得打命令或者忘记命令可能的run bug&#xff1a…

Hololens 2应用开发系列(2)——MRTK基础知识及配置文件配置(上)

Hololens 2应用开发系列&#xff08;2&#xff09;——MRTK基础知识及配置文件配置 一、前言二、MRTK基础知识2.1 MRTK概述2.2 MRTK运行逻辑2.3 MRTK配置文件介绍2.4 MRTK服务 三、配置文件使用3.1 总配置文件3.2 相机配置3.3 其他配置 参考文献 一、前言 在前面的文章中&…

【智能家居入门1之环境信息监测】(STM32、ONENET云平台、微信小程序、HTTP协议)

作为入门本篇只实现微信小程序接收下位机上传的数据&#xff0c;之后会持续发布如下项目&#xff1a;①可以实现微信小程序控制下位机动作&#xff0c;真正意义上的智能家居&#xff1b;②将网络通讯协议换成MQTT协议再实现上述功能&#xff0c;此时的服务器也不再是ONENET&…

一文看懂:组件化设计,B端系统不再重复造轮子。

B端组件化设计是指将企业级系统的界面设计和开发分解为独立的可复用组件&#xff0c;以实现系统的模块化和灵活性。 B端组件化设计的核心思想是将界面拆分成独立的功能组件&#xff0c;每个组件负责特定的功能或业务逻辑&#xff0c;可以独立开发、测试和维护&#xff0c;同时可…

[HackMyVM]靶场 Wild

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 …

综合练习

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 现有一个商店的数据库&#xff0c;记录顾客及其购物情况。根据要求完成任务 此数据库由下面 3 个表组成。 商品 product&#xff08;商品号 productid&#xff0c;商品名 p…

交友盲盒系统PHP开源的盲盒源码

源码介绍&#xff1a; 交友盲盒系统是一款基于PHP开发的开源免费盲盒系统&#xff0c;旨在为用户提供一个充满乐趣和惊喜的社交体验。该系统具有丰富的功能和灵活的扩展性&#xff0c;可以轻松地满足各种线上交友、抽奖活动等场景的需求。 安装说明&#xff1a; PHP版本&…

海外IP代理应用:亚马逊使用什么代理IP?

代理IP作为网络活动的有力工具&#xff0c;同时也是跨境电商的必备神器。亚马逊作为跨境电商的头部平台&#xff0c;吸引了大量的跨境电商玩家入驻&#xff0c;想要做好亚马逊&#xff0c;养号、测评都需要代理IP的帮助。那么应该使用什么代理IP呢&#xff1f;如何使用&#xf…