接下来就要到Fragment向Activity传输数据了。主要的思路,就是在Fragment中创建一个回调接口,利用该回调接口实现Fragment向Activity传输数据的功能。

回调函数(接口)


在学习利用回调接口实现Fragment向Activity传输数据之前,首先要对回调函数有所了解,下面引用知乎用户futeng的回答,侵删:https://www.zhihu.com/question/19801131/answer/26586203

简单来说,回调函数就是当在一个类A中去调用类B的方法b时,方法b会反过来回调A中的方法a,这个方法a便成为回调方法。回调方法的特点之一在于,当传入的参数为接口时,可以根据不同的类传入的接口实现不同,而产生不同的功能。

具体方法


了解了回调函数之后,我们便可以利用回调接口来实现Fragment向Activity传输数据。简要的思路是:在Fragment中定义一个回调接口,并且在onAttach()时,实例化该接口为Activity对象。而后,在Activity中实现该接口,便可以让Fragment在onAttach时,获取该接口的内容。最后,在Fragment的适当位置,回调该接口,即可实现Fragment向Activity传输数据的功能。

代码实现


一、在Fragment中定义接口

在Fragment中定义回调接口,并在onAttach中实例化(注意,onAttach(Activity activity)方法,在Android3.0后被舍弃,需要重载onAttach(Context context),并导入v4.Fragment包)

public interface mListener{
public void fragmentsend(String text);
}
private mListener mlistener; @Override
public void onAttach(Context context) {
super.onAttach(context);
mlistener= (mListener) context;
}

二、在Activity中实现该接口

public class Activity4 extends AppCompatActivity implements Fragment4.mListener {

    private TextView tv;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_4);
tv= (TextView) findViewById(R.id.a4tv);
Fragment4 fragment4 =new Fragment4();
FragmentManager supportFragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
fragmentTransaction.add(R.id.a4layout,fragment4);
fragmentTransaction.commit();
} @Override
public void fragmentsend(String text) {
tv.setText(text);
}
}

三、在Fragment的特定位置,回调该接口

本例中,实现的功能是在点击发送按钮后,把文本框中的内容发送给Activity,所以在按钮的onClick方法中,回调该接口即可。

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String string = et.getText().toString();
mlistener.fragmentsend(string);
}
});

静态加载简要说明


以上所述的Fragment与Activity的通信,皆为动态加载的过程。那么对于静态加载应该如何实现二者之间的通信呢?其实很容易,由于静态加载中,在Activity的布局文件中有Fragment的相关控件以及id,可以利用findFragmentById获取对应的Fragment,并用set和get方法,实现二者之间的数据传输。

FragmentManager supportFragmentManager = getSupportFragmentManager();
Fragment fragmentById = supportFragmentManager.findFragmentById(R.id.frame);
fragmentById.setaaa("hello");

界面展示


Android学习——Fragment与Activity通信(二)的更多相关文章

  1. Android学习——Fragment与Activity通信(一)

    学会了在Activity中加载Fragment的方法之后,接下来便需要学习Activity和Fragment之间的通信.这一节先学习如何把Activity中的信息传递给Fragment. 基本过程 在 ...

  2. android中fragment与activity之间通信原理以及例子

    参考文章 http://blog.csdn.net/guozh/article/details/25327685#comments Activity和fragment通信方式一般有3种方法 1.在fr ...

  3. 关于Fragment与Fragment、Activity通信的四种方式

    一直想总结一下Fragment与Fragment.Activity通信的问题,今天有时间一共总结了三种,权当抛砖引玉,如果大家还有更好的方式来实现Fragment和Fragment.Activity的 ...

  4. Fragment 与 Activity 通信

    先说说背景知识: (From:http://blog.csdn.net/t12x3456/article/details/8119607) 尽管fragment的实现是独立于activity的,可以被 ...

  5. Android(Fragment和Activity之间通信)

    Fragment的使用可以让我们的应用更灵活的适配各种型号的安卓设备,但是对于Fragment和Activity之间的通信,很多朋友应该比较陌生,下面我们就通过一个实例来看一看如何实现. 一.Acti ...

  6. Android 使用EventBus进行Fragment和Activity通信

    本文介绍EventBus的基本使用,以及用于Fragment和Activity之间通信. github地址: https://github.com/greenrobot/EventBus 版本是 Ev ...

  7. Android开发——Fragment知识整理(二)

    0.  前言 Android开发中的Fragment的应用非常广泛,在Android开发--Fragment知识整理(一)中简单介绍了关于Fragment的生命周期,常用API,回退栈的应用等知识.这 ...

  8. Android 笔记-Fragment 与 Activity之间传递数据

    Fragment 与 Activity之间传递数据有两种方法.一种是使用setArgument,一种是使用接口回调.以下先学习第一种方法. (1)使用setArgument方法: 为了便于理解,我在这 ...

  9. Android学习——Fragment静态加载

    从今天开始做一套安卓的学习笔记,开发环境是Android Studio,把学习过程中的知识和遇到的问题都写在这里,先从Fragment开始学起. Fragment概述 Fragment是Android ...

随机推荐

  1. 队列 和 堆栈用python 来实现

    一.利用python列表实现堆栈和队列 堆栈: 堆栈是一个后进先出的数据结构,其工作方式就像生活中常见到的直梯,先进去的人肯定是最后出. 我们可以设置一个类,用列表来存放栈中的元素的信息,利用列表的a ...

  2. A计划(三维dfs)

    可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老.年迈的国王正是心急如焚,告招天下 ...

  3. BZOJ - 3757 树上莫队解决离线路径问题 & 学习心得

    题意:给你一棵树,求u,v最短路径的XXX(本题是统计权值种类) 今天课上摸鱼学了一种有意思的处理路径方式(其实是链式块状树翻车了看别的),据说实际运行跑的比XX记者还快 大概就是像序列莫队那样 首先 ...

  4. css 之 BFC

    1,定义 BFC为块级格式化上下文,也就是一块区域内的封闭空间,里面元素无论怎么样,都不会影响外部元素. 2,触发条件 html 根元素 display的值为 inline-block.table-c ...

  5. [转] 利用dockerize模板为容器内应用生成配置文件和环境变量

    [FROM] https://blog.csdn.net/liucaihong123/article/details/51945413 首先试验一下dockerize的可用性: 最近一个docker容 ...

  6. esper(4-5)- Context 条件

    条件主要包含:Filter,Pattern,Crontab以及Time Period Filter主要就是对属性值的过滤,比如: create context NewUser partition by ...

  7. Python 用栈判断括号匹配

    #!/usr/bin/python # -*- coding: UTF-8 -*- from pythonds.basic.stack import Stack def parChecker(symb ...

  8. MySql——Explain执行计划详解

    使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈. explain执行计划包含的信息 其中最重要的字段为:i ...

  9. 【软件安装】Xshell出现要继续使用此程序必须应用到最新的更新或使用新版本

    资源可以用,但是安装完成后启动会报错:“要继续使用此程序,您必须应用最新的更新或使用新版本” 解决办法先修改你电脑时间为前一年(2017 1月),然后就可以打开xshell了,打开后"工具& ...

  10. 深入理解JavaScript系列(14):作用域链(Scope Chain)

    前言 在第12章关于变量对象的描述中,我们已经知道一个执行上下文 的数据(变量.函数声明和函数的形参)作为属性存储在变量对象中. 同时我们也知道变量对象在每次进入上下文时创建,并填入初始值,值的更新出 ...