接下来就要到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. cenos安装erlang

    https://blog.zfanw.com/install-erlang-on-centos/

  2. 洛谷 P2542 [AHOI2005]航线规划(Link-cut-tree)

    题面 洛谷 bzoj 题解 离线处理+LCT 有点像星球大战 我们可以倒着做,断边变成连边 我们可以把边变成一个点 连边时,如果两个点本身不联通,就\(val\)赋为\(1\),并连接这条边 如果,两 ...

  3. POJ_1456 Supermarket 【并查集/贪心】

    一.题面 POJ1456 二.分析 1.贪心策略:先保证从利润最大的开始判断,然后开一个标记时间是否能访问的数组,时间尽量从最大的时间开始选择,这样能够保证后面时间小的还能够卖. 2.并查集:并查集直 ...

  4. HDU 6336 (规律 + 二维矩阵的前缀和妙用)

    题目 给出长度为n 的A矩阵 , 按 int cursor = 0; for (int i = 0; ; ++i) { for (int j = 0; j <= i; ++j) { M[j][i ...

  5. POJ - 3261 后缀数组 height应用

    题意:求最少重叠\(k\)次的重复子串的最大长度 子串长度问题依然是二分枚举,可以观察出重叠的一定是sa排序中连续的 之前想出一种判断要\(n^2\)的方法,没有考虑到后面肯定会连续出现的情况 (大概 ...

  6. 深入剖析PHP输入流 php://input

    另附一个一个连接: http://www.nowamagic.net/academy/detail/12220520 ///////////////////////////////////////// ...

  7. C++ GUI Qt4编程(09)-3.3spreadsheet-toolbar

    1. C++ GUI Qt4编程第三章,增加工具栏.状态栏和快捷键. 2. mainwindow.h /**/ #ifndef MAINWINDOW_H #define MAINWINDOW_H #i ...

  8. element-ui Form表单验证

    element-ui Form表单验证规则全解 element的form表单非常好用,自带了验证规则,用起来很方便,官网给的案例对于一些普通场景完全没问题,不过一些复杂场景的验证还得自己多看文档摸索, ...

  9. google风格

    复制一下代码即可: <?xml version="1.0" encoding="UTF-8" standalone="no"?> ...

  10. 在CentOS 7上搭建私有Docker仓库

    Hub IP:10.0.2.6 操作系统:CentOS 7 64位 Docker版本:1.12.5Client IP:10.0.2.4 操作系统:CentOS 7 64位 Docker版本:1.12. ...