Fragment 通信

全新的Fragment通信方式 前言 就在前段时间,Google 推出了 Fragment Result API 和 Activity Results API,用来取代之前的 Activity 和 Fragment 之间通信方式的不足,大家可以前往看看都有那些更新: https://medium.com/androiddevelopers/now-in-android-17-9d73f7bed7f 通过Fragment Result API进行Fragment间数据传递: 发送数据 @Override @NonNull public fi 阅读详情

首先列举一下Fragment中可以实现通信的技术:

万金油 eventBus rxBus:

优点:方便,快捷,简单

缺陷:

1.反射,性能打折,效率低

2.代码维护困难

3.数据无法返回,单向传送

 

handler

缺点:

1.耦合

2.无法获取activity的返回结果

3.内存泄漏

 

static

静态变量,内存消耗

 

广播

缺陷:

1.性能差,延迟

2.通信体系,较重,一个发生,多个接受

3.传播的数据有限

4.代码冗余

 

接口(最优方案)

简单、效率高,方便,解耦合

缺点:

代码冗余,每个需要通信的fragment,都需要定义自己独一无二的接口。

那最合适的通信方法,可以写一个万能接口,共用。

下面把代码贴出来:

首先先定义一个基类

/**
 * 万能接口之-----基类
 */

public class Function {

    //方法名字
    public String functionName;

    //传递方法名字
    public Function(String functionName){
        this.functionName = functionName;
    }

}

其次方法类

/**
 * 万能接口之-----有参数,无返回值的方法(这里我只实现了一个方法类型)
 */

public abstract class FunctionHasParamNoResult<P> extends Function {

    public FunctionHasParamNoResult(String functionName) {
        super(functionName);
    }

    public abstract void function(P p);
}

最后是管理类

/**
 * 万能接口之-----接口管理类
 */

public class FunctionManager {

    private static FunctionManager instance;

    /**
     * 容器,用来存储方法名字 key 对应的方法名 value 对应的是 参数返回对象
     */
    //这里只实现了一种容器 就是有参数,无返回。故只有一种容器
    private Map<String, FunctionHasParamNoResult> mNasparamNoResultMap;

    /**
     * 构造方法
     */
    private FunctionManager() {
        mNasparamNoResultMap = new HashMap<>();
    }

    public static FunctionManager getInstance() {
        if (instance == null) {
            instance = new FunctionManager();
        }
        return instance;
    }


    /***
     * 添加有参数无返回值的方法
     * @param function
     */
    public void addFunction(FunctionHasParamNoResult function) {
        mNasparamNoResultMap.put(function.functionName, function);
    }


    /***
     * 调用有参数无返回值的方法
     * @param functionName
     * @param p
     * @param <P>
     */
    public <P> void invokeFunction(String functionName, P p) {
        //判断方法名是否为空,若为空跳出此方法
        if (TextUtils.isEmpty(functionName)) {
            return;
        }
        //判断 (有参数无返回值)的容器是否为空
        if (mNasparamNoResultMap != null) {
            //根据方法名查询容器中对应的数据
            FunctionHasParamNoResult f = mNasparamNoResultMap.get(functionName);
            if (f != null) {
                //调用回调传值
                f.function(p);
            } else {
                try {
                    throw new Exception("方法不存在");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

调用:(A->B:key对应方法名,valule对应传递的值)

A:FunctionManager.getInstance().invokeFunction("key","vaule");

 

B:FunctionManager.getInstance().addFunction(new FunctionHasParamNoResult("key") {
    @Override
    public void function(Object o) {
        Log.e("arguments", "万能的接口:"+o.toString());
    }
});

 

 

 

 

 

 

 

 

 

android fragment于fragment之间通信 今天在写项目的时候遇到fragment于fragment之间的传值,经过一个小时的调试终于调试通了,记录下来。 //目标fragment InfoFragment fragment = new InfoFragment(); //这里需要注意一下:getChildFragmentManager所得到的是在fragment里面子容器的管理器 getFragmentManager()直接获取Fr... 阅读详情

相关推荐

Fragment与activity之间的通信

Fragment与activity的两种通信方式 Fragment与activity之间有多种通信方式,今天我们主要说两种通信方式,直接在一个activity传值给Fragment的方法和Fragment直接调用Activity中的public方法 Fragment直接调用Activity中的public方法 activity传值给fragment,在这其中我们首先得使用Bundle方法,首...

qq_38842722的博客 4612

盘一下 Fragment 间的五种通信方式

今年 Google I/O 上介绍了 Jetpack 近期的更新内容,其中包括 Fragment 新增的 Result API 。本文借机盘点一下 Fragment 各种常见的通信方式。 Fragment 间的通信可以借助以下几种方式实现: 1、EventBus 2、Activity(or Parent Fragment) 3、ViewModel 4、Result API 1 基于 EventBus 通信 EventBus的优缺点都很突出。优点是限制...

winskyan的专栏 4341

Fragment和Activity通信以及Fragment之间通信的方式(1)

Fragment和Activity通信以及Fragment之间通信的方式(1),http://blog.youkuaiyun.com/yalinfendou博客中有详细介绍……

Fragment之间的通信

写一写关于Fragment生命周期的相关。先放上一张老图!! Fragment生命周期     Fragment的两种加载方式 第一种,直接添加的方式 //步骤一:添加一个FragmentTransaction的实例 FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction transa...

dsq88163的专栏 5739

Fragment之间通信实例

http://blog.youkuaiyun.com/chivalrousman/article/details/51623122

Activity,Fragment通讯

Activity通知Fragment采用观察者模式,fragment之间通讯另建Function接口

介绍一下 Fragment 间的通信方式

Fragment 间的通信方式

QG 753

Fragment之间的通信之万能接口

1、在fragment定义一个接口 2、Activity实现接口 3、将接口与fragment和acvtivity绑定暴露

fragment通信的几种方式(接口框架)

fragment通信是我们经常遇到问题,各种解决方案都有。 首先明确的重要点:谷歌官方建议两个fragment不要直接通信,会造成碎片耦合。 方案一:handler方案 方案二:广播 方案三:EventBus 方案四:普通接口 方案五:万能接口

HUandroid的博客 5720

Fragment通信及参数传递

本实例介绍了通过接口调用的方式进行Fragment之间的通信和参数传递,关键部分做了注释。希望给学习Android移动开发的朋友带来帮助。

如何通过常规测井曲线识别砂岩、泥岩、碳酸盐岩和煤层

常规测井曲线通过不同岩性的物理性质差异识别砂岩、泥岩、碳酸盐岩和煤层。砂岩表现为低自然伽马(GR)、中等密度(RHOB)和声波时差(DT);泥岩以高GR、高中子(NPHI)和高DT为特征;碳酸盐岩显示低GR、高RHOB和低DT;煤层则具有极低RHOB、极高NPHI和DT的独特组合。综合GR与三孔隙度曲线(RHOB、NPHI、DT)可有效区分岩性,其中密度测井对煤层识别最可靠。电阻率(RT)曲线辅助判断流体性质,但需结合其他参数综合分析。

love code, love life. 2593

Android中Fragment与Fragment,Fragment与Activity之间的通信

上一篇文章讲解了Fragment的一些基本用法,主要包括Fragment的动态和静态添加的问题。但是在实际的项目开发中,只知道这些还不够,还需要掌握Fragment与Fragment,Fragment与Activity之间的数据通信问题。 Fragment与Fragment之间的通信 一个Activity中经常会包含多个Fragment,多个Fragment之间的数据通信就变成了一个问题,下面

SparkYuan 1458

Opencv全景图像处理实战:柱面与透视展开技术详解

本文详细解析了使用OpenCV实现全景图像处理的两种核心技术:柱面展开与透视展开。通过原理拆解与实战代码演示,指导开发者将360度环绕的鱼眼或球面图像转换为可用的平面视图,适用于街景展示、车载环视、室内测量等计算机视觉应用场景。

weixin_29081163的博客 583

fragment及fragment的通信

引用API的一段话作为开头A Fragment is a piece of an application's user interface or behavior that can be placed in an Activity. Interaction with fragments is done through FragmentManager, which can be obtained vi

yueyue_projects的专栏 947

从压电传感器到示波器:手把手教你用CA3140搭建电荷放大器(含PCB布局与调零技巧)

本文详细介绍了如何使用CA3140运算放大器搭建专业级电荷放大器,从压电传感器信号特性分析到PCB布局与调零技巧,全程实战演示。重点解析了CA3140的低通滤波器设计、反馈网络参数计算及抗干扰增强方案,帮助电子爱好者高效实现微弱电荷信号的稳定转换与测量。

weixin_31355483的博客 598

Vue+OpenLayers6一本通,OpenLayers6完整教程大全,OpenLayers6全知全解,OpenLayers6入门、实战、扩展进阶三合一专栏目录汇总

Gis开发入门,OpenLayers、Leaflet、Maplibre-gl和Cesiumjs地图引擎介绍以及几种地图服务vms、vmts介绍OpenLayers介绍,相比较其他地图引擎有什么优点OpenLayers7.x版本和6.x版本有什么区别,是否需要升级到OpenLayers7版本?OpenLayers6实战:OpenLayers创建自定义控件,以创建一个地图复位控件为例OpenLayers6实战,OpenLayers创建自定义鹰眼控件,自定义鹰眼控件样式,调整鹰眼控件位置、大小、文字和按钮等样式。

GIS技术方向,GIS地图技术分享(GIS入门、Openlayers教程、Leaflet教程),做最好的GIS地图开发教程。关注博主公众号:eguid 2199

fragment fragment 通信

1.直接在一个Fragment中调用另外一个Fragment中的方法 我们可以直接在一个Fragment中调用另外一个Fragment的公开方法,前提是要先拿到另外一个Fragment的实例,我们先来看看怎样在左边的Fragment中拿到右边Fragment的实例: ContentFragment cf = (ContentFragment) getActivity().getFragmentM

cs_zhangyi的博客 595

位置点位到达判断FC(Easy+Codesys+博途平台)

IN rActPositon REAL 轴当前实际位置 1IN arAbsPosition REAL[10] 各工作点位坐标 2IN rDeadZone REAL 位置达到判断域值 范围 3OUT abInAbsPos BOOL[10] 到达各绝对定位点位标志 位置到达输出 4VAR i INT 循环计数 5VAR rErr REAL 位置偏差 6。

RXXW_Dor的博客 536

Fragment与Activity间的通信 Fragment与Fragment间的通信

Fragment与Activity间的通信 视频Fragment与Acctivity间的通信 Activity向Fragment传值 Activity向引入的Fragment传值步骤: 1.Activity中创建Fragment对象,调用setArguments(bundle)方法储存值 2.Fragment中调用getArguments()获取传递的bundle对象解析获取具体值 ...

lxjhoney的博客 351

C#实战:YOLOv5+海康工业相机上位机开发全攻略(从图像采集到检测落地)

工业场景下AI质检系统的开发需要综合考虑硬件适配性、算法性能和稳定性。本文针对新能源电池极片缺陷检测场景,提出基于海康工业相机+YOLOv5+C#的技术方案,涵盖以下关键点: 工业级技术选型:选择支持全局快门的海康相机、OpenCvSharp图像处理、YOLOv5s轻量化模型,确保在无GPU工控机上稳定运行。 开发流程优化: 海康SDK集成:详细说明DLL配置和常见报错解决方案 YOLOv5模型导出:强调batch=1、opset12等工业适配参数 相机采集封装:提供线程安全的C#封装类,支持触发采集模式

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1197

基于AI的智能开发环境—Trae在Web开发中的应用实战与性能评估【Trae项目实战】

Trae 是一款与 AI 深度集成的开发工具,提供智能问答、代码自动补全和基于 Agent 的 AI 自动编程能力,极大提升开发效率。它具备完备的 IDE 功能,如代码编写、项目管理和源代码管理等,同时还具备强大的 AI 助手,能够提供智能问答、实时代码建议、代码片段生成等服务。开发者可以通过自然语言与 AI 协作,从 0 到 1 开发项目,AI 会根据需求自动生成代码或创建文件。

一键难忘的博客 3万+

Android Fragment之间的通信

1.Fragment 的概述(1)Fragment是什么 我们都知道,Fragment的翻译可以译为:碎片、片段。在Android开发中引入这一概念的目的是为了解决不同安卓设备屏幕分辩率不同的问题,引入Fragment碎片技术,可以实现动态和灵活的UI设计,软件工程师们不需要再对同一款软件进行多次的适应性开发,以便于适应不同屏幕分辨率的安卓设备。我们可以将Fragment看作是Acitivity的一

skylake_的博客 1159

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Activity与Fragment通信

前言 现在开发的很多项目都会使用Fragment,使用Fragment就是涉及到与其他问题。 1.Activity与Fragment通信 Activity -&gt;Fragment 传递参数,使用Bundle Fragment fragment = new Fragment(); Bundle bundle = new Bundle(); bundle.putSerializable(...

坚持学习 2419

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: android waiting for debugger
下一篇: Genymotion 下载安装及常见问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值