Android学习——Fragment与Activity通信(二)
接下来就要到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通信(二)的更多相关文章
- Android学习——Fragment与Activity通信(一)
学会了在Activity中加载Fragment的方法之后,接下来便需要学习Activity和Fragment之间的通信.这一节先学习如何把Activity中的信息传递给Fragment. 基本过程 在 ...
- android中fragment与activity之间通信原理以及例子
参考文章 http://blog.csdn.net/guozh/article/details/25327685#comments Activity和fragment通信方式一般有3种方法 1.在fr ...
- 关于Fragment与Fragment、Activity通信的四种方式
一直想总结一下Fragment与Fragment.Activity通信的问题,今天有时间一共总结了三种,权当抛砖引玉,如果大家还有更好的方式来实现Fragment和Fragment.Activity的 ...
- Fragment 与 Activity 通信
先说说背景知识: (From:http://blog.csdn.net/t12x3456/article/details/8119607) 尽管fragment的实现是独立于activity的,可以被 ...
- Android(Fragment和Activity之间通信)
Fragment的使用可以让我们的应用更灵活的适配各种型号的安卓设备,但是对于Fragment和Activity之间的通信,很多朋友应该比较陌生,下面我们就通过一个实例来看一看如何实现. 一.Acti ...
- Android 使用EventBus进行Fragment和Activity通信
本文介绍EventBus的基本使用,以及用于Fragment和Activity之间通信. github地址: https://github.com/greenrobot/EventBus 版本是 Ev ...
- Android开发——Fragment知识整理(二)
0. 前言 Android开发中的Fragment的应用非常广泛,在Android开发--Fragment知识整理(一)中简单介绍了关于Fragment的生命周期,常用API,回退栈的应用等知识.这 ...
- Android 笔记-Fragment 与 Activity之间传递数据
Fragment 与 Activity之间传递数据有两种方法.一种是使用setArgument,一种是使用接口回调.以下先学习第一种方法. (1)使用setArgument方法: 为了便于理解,我在这 ...
- Android学习——Fragment静态加载
从今天开始做一套安卓的学习笔记,开发环境是Android Studio,把学习过程中的知识和遇到的问题都写在这里,先从Fragment开始学起. Fragment概述 Fragment是Android ...
随机推荐
- cmd命令窗口相关操作指南
cmd命令窗口打开方式:win+R cmd 1.盘符切换 d: 回车 (d为磁盘名) 2.查看当前目录下的文件和文件夹 输入dir 3.进入指定目录(若需跨盘符操作,应先切换盘符) cd(空格)+绝对 ...
- 【算法笔记】B1041 考试座位号
1041 考试座位号 (15 分) 每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生 ...
- Magic Odd Square (思维+构造)
Find an n × n matrix with different numbers from 1 to n2, so the sum in each row, column and both ma ...
- hdu6183 Color it 线段树动态开点+查询减枝
题目传送门 题目大意: 有多次操作.操作0是清空二维平面的点,操作1是往二维平面(x,y)上放一个颜色为c的点,操作2是查询一个贴着y轴的矩形内有几种颜色的点,操作3退出程序. 思路: 由于查询的矩形 ...
- JS获取按键的代码,Js如何屏蔽用户的按键
[From] http://www.zgguan.com/zsfx/jsjc/1181.html 在使用JavaScript做WEB键盘事件侦听捕获时,主要采用onkeypress,onkeydown ...
- Element UI 中国省市区级联数据
https://www.npmjs.com/package/element-china-area-data
- golang context 剖析 1.7.4 版本
1. 内部结构之 - timerCtx . type timerCtx struct { cancelCtx timer *time.Timer // Under cancelCtx.mu. dead ...
- Apache Beam的API设计
不多说,直接上干货! Apache Beam的API设计 Apache Beam还在开发之中,后续对应的API设计可能会有所变化,不过从当前版本来看,基于对数据处理领域对象的抽象,API的设计风格大量 ...
- HDU 4460 Friend Chains
Problem Description For a group of people, there is an idea that everyone is equals to or less than ...
- 关于TypeScript中null,undefined的使用
TypeScript本质是javascript,因此基本上js所有的功能在ts上完全可以照搬照抄过来使用.根据ts的文档,有些我觉得值得商榷的——比如null,undefined就是例子. 文档上说一 ...