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嵌套fragment的通信

嵌套在Fragment里面的Fragment可以使用getParentFragment()函数获取到父窗口Fragment的实例,然后对其replace(替换)。 但是在外层Fragment添加内部fragment时要使用getChildFragmentManager(); getChildFragmentManager().beginTransaction().add(R.id.fl_a

gao2419956747的博客 2654

Fragment之间的通信

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

dsq88163的专栏 5739

Fragment之间的通信之万能接口

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

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

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

介绍一下 Fragment 间的通信方式

Fragment 间的通信方式

QG 753

Activity,Fragment通讯

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

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

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

HUandroid的博客 5720

Fragment通信及参数传递

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

社工库2.0

#大题目 社工库2.0 ###环境 whoosh2.7 jieba 12306 python3.7 网上嫖来的网页模板(感谢站长之家 ###实现效果 建立的索引文件 好看的页面 更快的查找速度 ###实现过程 具体的实现过程比较简易,毕竟whoosh已经封装的很好了 第一步 建立索引并存储 schema = Schema(zhanghao=TEXT(stored=True), code=STORED, name=TEXT(stored=True, analyzer=

sdyinruichao的博客 2万+

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

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

SparkYuan 1458

Marvell 88E6390x交换芯片:从零构建No-CPU模式网络交换系统

本文详细介绍了如何为Marvell 88E6390x以太网交换芯片构建No-CPU模式网络交换系统。通过解析其核心价值与硬件准备,并手把手指导使用CodeBlocks、IMPGUI和SwitchGUI等软件工具进行配置代码编写、镜像生成与烧录,最终实现交换芯片脱离外部CPU独立工作,适用于成本敏感、空间受限的嵌入式网络设备设计。

plant的博客 484

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

模拟IC版图DRC实战:手把手教你搞定MIM电容天线错误和ESD.10g违例

本文深入解析模拟IC版图中的MIM电容天线错误和ESD.10g违例问题,提供从错误解码到实战修复的完整指南。通过电路图修改、版图优化和验证闭环等步骤,帮助工程师高效解决DRC错误,特别适用于ADC等精密模拟电路设计。文章还分享了高级排错技巧和预防性设计策略,大幅提升流片成功率。

weixin_27697385的博客 295

雨流计数法的matlab实现,采用三点法与四点法

介绍雨流计数法是20世纪50年代由英国的两位工程师M.Matsuishi和T.Endo提出来的。该计数法的主要功能是把实测载荷历程简化为若干个载荷循环,供疲劳寿命估算和编制疲劳试验载荷谱使用。它以双参数法为基础,考虑了动强度(幅值)和静强度(均值)两个变量,符合疲劳载荷本身固有的特性。雨流计数法主要用于工程界,特别在疲劳寿命计算中运用非常广泛计数规则(1)雨流依次从载荷时间历程的峰值位置的内侧沿着...

u011391128的博客 3万+

fragment fragment 通信

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

cs_zhangyi的博客 595

精度与速度双突破:YOLOv8-Pose 在 RK3588 上实现高性能人体姿态分析部署

本教程从YOLOv8-pose模型的姿态识别训练,到RK3588的边缘量化部署,为你打造了一套“高精度+高实时性+低成本”的人体姿态分析解决方案。无论是健身动作纠正、智能安防行为检测,还是工业人员姿态监控,这套技术都能直接复用——你只需替换数据集与业务逻辑,即可快速落地专属的边缘AI姿态识别系统。如果你在实践中遇到任何卡点,欢迎随时交流。记住,人体姿态识别的价值在于“关键点准、推理快、部署易”,而这三者的平衡,正是你通过本教程能掌握的核心能力。

know_F0727的博客 434

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

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

lxjhoney的博客 351

2023.03.27更新大麦网PC端抢购软件和使用教程

近期发现大麦网页端抢购页面悄然发生变化,之前可以在页面选择票价、档次,并且点击按钮进行购票,现在不行了,新的页面如下图所示。已经安全没有了点击按钮,因此,但是并不代表不能像以前之前那样。

猫敷雪 1万+

013:无人机航线规划的概念

航线规划是无人机任务规划的核心环节,它决定了无人机在整个任务执行过程中的飞行路径。航线规划需要考虑多种因素,包括飞行时间、飞行距离、能源消耗、飞行安全等。

qq_31762031的博客 2444

Android Fragment之间的通信

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

skylake_的博客 1159

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Activity与Fragment通信

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

坚持学习 2419

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值