Android -- 每日一问:两个 Fragment 之间如何进行通信 ?

news2024/10/5 13:13:03

在这里插入图片描述

知识点

先说一下 Fragment,中文可以叫片段,其实我们也可以把它理解成一个组件,它有自己的生命周期(回调函数),可以组织UI和业务逻辑。但它不像 Android 的四大组件(Activity, Service, BroadcastReceiver和ContentProvider)那样可以独立存在,它必须要依附于 Activity,由 Activity 中的 FragmentManager 实例来管理它的生命周期。

Google 最初引入 Fragment 主要是为了给大屏幕(如平板电脑)上更加动态和灵活的 UI 设计提供支持,看一下下图你就明白了:
image.png

我们可以在多个 Activity 中重复使用某个片段,并且可以按我们的需求把不同的片段组合在一个界面中,好处显而易见,减少工作量提高了代码的可重用性。

也就是说每个片段是相互独立的,如上图所示,Fragment A 并不知道这个 Activity 中是否存在Fragment B。这样一来就会产生 Fragment 之间通信的问题(比如Fragment A点击了列表的一项,Fragment B的内容要进行更新),当然这个问题的答案并不是唯一的,有很多种做法。不过,最基础的做法你应该了解一下,就是通过 Activity 进行通信。

尽管 Fragment 是作为独立于Activity的对象实现,并且可在多个Activity内使用,但片段的给定实例会直接绑定到包含它的 Activity。具体地说,片段可以通过getActivity()访问 Activity 实例。

同样地,Activity 也可以使用 findFragmentById() 或 findFragmentByTag() ,通过从FragmentManager获取对Fragment的引用来调用片段中的方法。

知道这些基础,你应该很清楚怎么进行通信了。不过我们建议的方式是面向接口编程,在Fragment中getActivity获取到的Activity实例应该是实现了我们某个接口的实例,即在Fragment的代码中不应该出现某个具体的Activity类。

Fragment的生命周期

如果你喜欢使用Fragment,一定要清楚这些生命周期的方法,哪个方法会创建视图(View),哪个会销毁视图,这样才能更好的使用它们。

先来看看官方的Fragmenet生命周期和Activity生命周期的对应关系图:
image.png

是不是觉得,好像也没有多复杂,只是在一些对应的 Activity 生命周期方法上进行了细分。

我们再看看反对使用 Fragment 的人是如何看待 Fragment 的生命周期的:

image.png

是不是头都大了?简单地说Fragment的生命周期并不像官方描述的那样简单,感兴趣的朋友可以看看这篇文章:我为什么主张反对使用Android Fragment。

Fragment 虽然在某种程度上实现了代码复用,但并没有将 UI 和逻辑分离,而且引入了复杂的生命周期,在一定程度上也限制了它的使用。如 Fragment 嵌套 Fragment 可能会遇到嵌套的 Fragment 接收不到 onActivityResult 事件之类的问题。

不过,我也看到有人是这样使用 Fragment 的,创建一个没有 UI 的 Fragment 仅将它做为保存状态的工具使用。因为 Fragment 也有 onSaveInstanceState 方法,可以在里面对状态进行处理,而且系统回收Activity 后再使用 Activity 时会帮我们恢复 Fragment 的状态。

关于 Fragment 还有很多细节,如果面试者经常使用的话,还可以问问“如何管理Fragment回退栈”或者“FragmentTransaction中remove和detach的区别”等问题。

你的朋友是不是也在准备面试呢?你可以“请朋友读”,把今天的题目分享给好友,或许你能帮到他。

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

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

相关文章

Blend for Visual Studio 让XAML也可以像WinForm一样可视化设计,Blend 与Studio的区别

1.Blend独有的高级功能 任务Visual StudioBlend for Visual Studio更多信息设计可视状态没有可帮助你设计可视状态的工具;必须以编程方式创建它们。使用设计工具可基于其状态更改控件的外观。创建动画没有用于动画的设计工具;必须以编程方式创建它们。 …

《WEB安全漏洞100讲》(第4讲)CSRF漏洞

1.CSRF漏洞原理 CSRF(Cross-site request forgery),跨站请求伪造,简写 CSRF/XSRF。指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的…

【java】4-线程的状态

1. 线程状态的含义 线程在不同的时期具有不同的状态,线程状态是线程实例的一个非常重要的属性,我们可以通过状态看到当前线程究竟是在被创建,运行,阻塞还是已经中断,或是处于别的状态,以便更好地对于代码进…

ARM通用中断控制器GIC之中断控制

在阅读本章之前,可以参考笔者之前关于GIC的一些描述: ARM通用中断控制器GIC(generic Interrupt Controller)简介 ARM架构Generic Interrupt Controller(GIC)之Distributor和CPU interface功能介绍 ARM架构Generic Interrupt Controller(GIC)详解之术语…

一文带你快速搭建框架(最全MyBatis笔记)

目录 一.概述 1.简介 2.maven构建 二.相关概念 1.Mapper接口 2.ORM思想 三.映射配置文件 1.文件结构 2.映射配置文件标签详解 3.SQL语句中参数的获取 (1)获取方式 (2)参数类型 4.各种SQL操作 5.处理表字段和实体类属性名不一致的情况 6.多对一映射关系的处理 7…

InnoDB引擎架构

1、逻辑存储结构: 表空间(ibd文件):一个Mysql实例可以对应多个表空间,用于存储记录、索引等数据。 段:分为数据段、索引段、回滚段、 InnoDB是索引组织表,数据段就是B树的叶子节点&#xff0c…

使用Flink1.16.0的SQLGateway迁移Hive SQL任务

使用Flink的SQL Gateway迁移Hive SQL任务 前言 我们有数万个离线任务,主要还是默认的DataPhin调度CDP集群的Hive On Tez这种低成本任务,当然也有PySpark、打Jar包的Spark和打Jar包的Flink任务这种高成本的任务【Java和Scala都有】。毕竟SQL上手门槛极低…

【邻接表】【数组表示链表】怎么用数组链表 表示 邻接表

怎么用数组链表 表示 邻接表***邻接表(数组链表)是怎么存储的?***邻接表(数组链表)是怎么存储的? 正常情况下,我们用链表存储的话,我们让 1 指向 2 我们会给出 1 和 2的地址&#xf…

Java基于JSP二手书交易平台设计与实现

现代网络技术发展迅速,传统的书店销售模式受到诸如场地、资金、宣传等因素制约,已经不能满足人们的日益增长的图书购买需求,网上书店应运而生,基于web的网络书店给人们带来了很大便利,网络书店不仅是传统售书模式的发展…

AidLux智慧交通AI安全实战学习

本次参加AidLux训练营,Rocky作为主讲老师,学习到了利用目标检测算法流程和AI攻防策略进行结合,从而达到安全。 1.检测汽车模型的训练 本次目标检测的模型是Yolov5,首先对标注图片 进行转换,转换为yolov5的格式&#…

《痞子衡嵌入式半月刊》 第 61 期

痞子衡嵌入式半月刊: 第 61 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢…

激光切割机机械结构设计

目 录 摘 要………………………………………………………………………………………Ⅰ ABSTRACT…………………………………………………………………………………… Ⅱ 1 绪论 1 1.1课题背景 1 1.2现实意义 1 1.3设计任务 1 1.4总体设计方案分析 2 2 机械部分XY工作台及Z轴的…

分享99个小清新PPT模板,总有一款适合您

PPT下载链接:https://pan.baidu.com/s/1VW0Eljx1Ac9QEEBaiIvqcg?pwd40hn 提取码:40hn 源码下载链接:ppt.rar - 蓝奏云 采集的参数 page_count 1 # 每个栏目开始业务content"text/html; charsetgb2312"base_url "https:…

如何查找无物流信息单号

我是在一家大公司里面上班,我公司都是那种厂家直销,所以每天发货量是比较大,同时一天都是几家快递同时发货,我是负责每天跟踪物流信息状况,公司要求每天都上报当天发货的快递在24小时之内有没有物流信息,如…

嵌入式编程别忽略了C语言的标准

正文大家好,我是bug菌~最近做代码评审发现很多同事的编码都游走在风险的边沿,其中最显眼的就是局部变量定义位置比较随意。对于C语言编程老手而言,绝大部分都已经养成了"变量定义必放在语句块的开头"这一习惯,依稀还记得…

windows虚拟机中docker运行springboot容器报错:Unable to access jarfile /app.jar

1.在Windows系统中创建了虚拟机,并且在虚拟机中安装了docker,但是在使用Dockerfile创建镜像并且运行时报错 2.使用shell脚本运行的,并且检查后也没有发现文件或者路径有错 解决: 使用vim加参数的形式打开shell脚本,可以…

微服务架构下的认证鉴权解决方案

背景 单体应用在向微服务化架构演进时,需要考虑如何解决服务认证授权的问题。如果处理不好,会引发架构的混乱,带来安全、性能、难以维护的问题。 以最典型的包含WEB页面的具备登录态管理的系统为例。在最初阶段,登录鉴权一般通过…

文华财经期货技术分析日内多空信号共振指标公式,波段行情短线抄单操盘幅图指标

​期货交易的很大一个误区是“痴迷于各种指标公式” 大家千万不要痴迷于指标,记住一点:行情软件界面之中的K线图叫主图,其余指标叫附图。 这从叫法上就该知道,我们寻找买卖点要在主图K线上来寻找,指标只是起到辅助分析的作用&…

操作系统02_内存分页管理_分段管理_设备管理_IO处理_索引文件结构_文件目录_位示图---软考高级系统架构师007

存储管理可以分为固定存储管理和分页存储管理。 现在固定存储管理已经不用也不考,但要知道因为固定存储管理指的是整存整取 也就是把一整个程序,比如说10G的游戏全部都存到内存里 这样的话是非常占用内存的,这个固定存储管理现在已经不用了。 然后这里我们主要看分页存储管: …

蓝桥杯比赛 NOC竞赛C++项目选择题真题和模拟题汇总

题目来源:第10届蓝桥杯青少年组C选拔赛 1、下面哪个密码最安全 A. 111111 B. 123456 C. qwerty D. Z2a8Q1 2、如果今天是星期六,再过60天是星期几? A. 星期三 B. 星期四 C. 星期五 D. 星期六 3、90到100之间有几个素数? …