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移动开发的朋友带来帮助。

Android PackageManagerService 总结(一)应用市场下载安装apk流程

前言: 本篇文章是对系统包安装流程的总结,基于Android12 上 com.android.packageinstaller 源码的分析,第三方应用商城(华为商城,小米商城,应用宝,豌豆荚,酷安等)下载安装应 用,在普通安装和静默安装app两种方式下,对代码流程的梳理和讲解。 触发安装: 当你在商城界面中点击安装按钮,应用会自动下载,下载完成后就会调起系统安装应用的界面,此种触发方式一般是通过Intent 隐式调用的,我们先阅读如下代码: ......

u012514113的专栏 1万+

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

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

SparkYuan 1458

ANSYS APDL实战:手把手教你搞定电磁-热耦合分析(附完整命令流)

本文通过一个工业感应加热线圈的实战案例,手把手教你使用ANSYS APDL完成电磁-热耦合分析。内容涵盖从几何建模、材料定义、网格划分到加载求解及后处理的完整流程,重点讲解了使用PLANE13单元进行双向耦合场分析的方法与命令流调试技巧,助力工程师快速掌握这一核心仿真能力。

weixin_29284201的博客 427

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

告别OLE!Delphi操作Excel的3种轻量级方案横向评测(FlexCel/XLSReadWriteII/LibXL)

本文深入评测了Delphi操作Excel的三种轻量级方案:FlexCel、XLSReadWriteII和LibXL。通过技术架构、API设计、性能测试和实战案例的全面对比,帮助开发者选择最适合的工具,提升Excel文件处理效率,告别传统OLE方案的依赖和性能问题。

onion的博客 930

射频测试基础知识总结

表示可以辐射到空间的电磁频率,频率范围从300KHz~110GHz之间,射频简称RF,是高频交流变化电磁波的简称,其每秒变化小于1000次被称为低频电流,超过10000次的称为高频电流,而射频就是这种高频电流。为了确保天线接收的信号能够在接收机的最后一级被正确的恢复,一个好的低噪音放大器需要在放大信号的同时产生尽可能低的噪音以及失真。两种,带内试验的范围也有一定的差别,比如,带内试验主要是检测信号的质量,如功率、频谱宽度、调制质量,而带外测试的是信号的杂散、谐波,主要是看对频带之外的干扰有多大。

cny70的博客 9628

fragment fragment 通信

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

cs_zhangyi的博客 595

VS2019 +osg3.6.5+ earth3.2+qt5.14.2+osgQt 编译教程

用vs新建工程,稍后会在写一篇博客上分享四、结语至此,所有的编译就均已完成。

king_ink的博客 1134

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

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

lxjhoney的博客 351

行测测评——矩阵、圆形、环形三角图形数列推理解题技巧

写在前面:各大公司的测评做的让人眼花缭乱,很多题型都是第一次见,比如逻辑关系、信息推理,最难的要属找规律的数字推理了。根据B站UP主刘文超老师的课程,记录一下解题技巧。感谢UP主的无私奉献,原地址连接:https://www.bilibili.com/video/BV1it411M7o2?t=528&p=7 解题技巧: 从图形的上下、左右、交叉 角度进行尝试求解 基本法则是“加、减、乘、除、倍数、次方”六种形态。 一、有心数阵 解题技巧:周边数字通过某种运算得到中间数字 1.周边数..

涵盖了计算机专业基础知识、数学建模相关实践、复杂网络论文研究、LeetCode算法刷题经验、C语言开发经验、前端Vue、React框架开发实战相关知识 8643

嵌入式面经篇八——进程&线程

记录一些招聘公司在招聘嵌入式软件岗位时的一些问题,此文为第八篇。进程上文:是指进程由用户态切换到内核态时需要保存用户态时CPU寄存器中的值,进程状态以及堆栈上的内容。即保存当前进程的状态,以便再次执行该进程时,能够恢复切换时的状态,继续执行。进程下文:是指切换到内核态后执行的程序,即进程运行在内核空间的部分。中断上文:硬件通过中断触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。

明天你好的博客 1854

Android Fragment之间的通信

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

skylake_的博客 1159

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Activity与Fragment通信

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

坚持学习 2419

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值