Fragment与Acitvity通信
Fragment与Activity通信的方式如下:
一、通过初始化函数提供
1.在动态添加Fragment的过程中,我们在Activity中通过Fragment.setArguments()的方法为Fragment提供数据;
2.在Fragment中,在onAttach()函数中通过调用getArguments()获得一个Bundle对象,从而获取我们提供的数据。
二、创建回调接口
比如说:新闻浏览情境下,共有两个Fragment,一个是用来显示新闻标题;另外一个用来显示新闻内容。当我们点击新闻标题的时候,新闻的内容就显示到另外一个Fragment当中了。下面我们就来通过按下Fragment1中的button来传递一个消息到Fragment2中。
首先我们要做的是,在Fragment1中创建一个回调接口,并且在Activity中重写他的方法,传递信息给Fragment2(举一反三:我们也可以传递给其他的Fragment)。
1.创建回调接口;
public interface OnButtonClickListener {
public void onButtonClicked();
}
2.为了确保宿主activity实现这个接口,fragment1的onAttach() 方法中通过将传入的activity强制类型转换,实例化一个OnButtonClickListener对象;
@Override
public void onAttach(Activity activity) {
Log.v(TAG, "Fragment1 onAttach");
Bundle args = getArguments();
if (null != args) {
// 在这里我们可以将从Acivity收到的数据保存起来,并且显示到Fragment当中。 try {
mListener = (OnButtonClickListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnButtonClickListener");
}
super.onAttach(activity);
}
3.注册Button的Click事件,并在事件中调用回调方法。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
Log.v(TAG, "Fragment1 onCreateView");
View view = inflater.inflate(R.layout.fragment1, container, false);
// 为button注册事件,并且调用回调接口,将信息返回给上层
view.findViewById(R.id.fragment1_btn).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mListener.onButtonClicked();
}
});
return view;
}
然后,Activity的代码要实现:
1.通过implements实现回调接口;
public class MainActivity extends FragmentActivity implements OnButtonClickListener{
2.重写回调方法,然后向Fragment2传递数据。
@Override
public void onButtonClicked() {
Log.i(TAG, "onButtonClicked");
TextView tv = (TextView) fragment2.getActivity().findViewById(R.id.fragment2_tv);
tv.setText(tv.getText() + "\n从Fragment1收到数据!");
}
三、源码下载
参考链接:http://www.cnblogs.com/getherBlog/p/3949171.html
代码下载链接:http://www.apkbus.com/android-179360-1-1.html
Fragment与Acitvity通信的更多相关文章
- 【Android开发】之Fragment与Acitvity通信
上一篇我们讲到与Fragment有关的常用函数,既然Fragment被称为是“小Activity”,现在我们来讲一下Fragment如何与Acitivity通信.如果上一篇还有不懂得,可以再看一下.传 ...
- Fragment间的通信
在网上看到的一篇文章,总结的很好 为了重用Fragment的UI组件,创建的每个Fragment都应该是自包含的.有它自己的布局和行为的模块化组件.一旦你定义了这些可重用的Fragment,你就可以把 ...
- Fragment之间的通信(四)
自定义两个fragment的布局和java类. 在mainactivity中引用布局文件 在其中的一个fragment中的控件上添加监听,获取到另一个fragment中控件的内容,展示出来完成frag ...
- Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
以下内容为原创,转载请注明:http://www.cnblogs.com/tiantianbyconan/p/3364728.html 我前两天写过一篇博客<Android使用Fragment来 ...
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
以下内容为原创,转载请注明:http://www.cnblogs.com/tiantianbyconan/p/3360938.html 如新浪微博下面的标签切换功能,我以前也写过一篇博文(http:/ ...
- Fragment之间的通信
在本节中,你会学到 1.定义接口 2.实现接口 3.将消息传递给fragment 为了重用Fragment UI 组件,在设计中你应该通过定义每一个fragemnt自己的layout和行为,让frag ...
- 利用Fragment创建动态UI 之 Fragment之间的通信
为了可以复用一个fragment,所以在定义fragment的时候,要把它定义为一个完全独立和模块化,它有它自己的layout和行为.当你定义好了这些可复用的fragment,可以把他们和activi ...
- 关于Fragment与Fragment、Activity通信的四种方式
一直想总结一下Fragment与Fragment.Activity通信的问题,今天有时间一共总结了三种,权当抛砖引玉,如果大家还有更好的方式来实现Fragment和Fragment.Activity的 ...
- Fragment的生命周期&同一Activity下不同Fragment之间的通信
Android开发:碎片Fragment完全解析(2) Fragment的生命周期 和Activity一样,Fragment也有自己的生命周期,理解Fragment的生命周期非常重要,我们通过代码的方 ...
随机推荐
- 【关键字】c++关键字
1. alignas (c++11) 设置类和struct的字节对齐方式 默认取值是: 2n : 0, 1, 2, 4 , 6, 8..... 2. alignof 区分sizeof(), alig ...
- spring注解第01课 @Configuration、@Bean
一.原始的 xml配置方式 1.Spring pom 依赖 <dependency> <groupId>org.springframework</groupId> ...
- 三十三、Linux 进程与信号——中断系统调用和函数可重入性
33.1 中断系统调用 进程调用 “慢” 系统调用时,如果发生了信号,内核会重启系统调用. 慢系统调用 可能会永久阻塞的系统调用 从终端设备.管道或网络设备上的文件读取 向上述文件写入 某些设备上的文 ...
- 【bzoj 3110】[Zjoi2013]K大数查询
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位 ...
- 查看 Linux memory 内存占用
linux 系统内存: 如果系统内存使用过高 就会产生 out of memory exception 现象: 通常 在mongo 默认服务运行资源是不受限制的.也会占用而同一系统运行的其他服务: 当 ...
- pycharm活动模板
1.复制模板内容 2.文件设置: 点击+号:
- ubuntu完全卸载mysql
可以先用 dpkg --list|grep mysql 查看自己的mysql有哪些依赖 一.先卸载 mysql-common sudo apt-get remove mysql-common 二.然后 ...
- BZOJ4921「Lydsy1706月赛」互质序列
吐槽一下BZOJ没有C++11 题还是不难的 BZOJ 4921 题意 在长度为$ n$的数列中去掉非空的连续一段并保证剩下数字不少于$ 2$ 求合法的所有方案中剩下数字的最大公约数的总和 $Sol ...
- python3:实现输出等边三角形、直角三角形
学习python,用的是3.5的版本: 记录一下学习历程~ 一.先来一个简单的,输出直角三角形: ***知识点:for循环,range()函数 二.进阶:输出等边三角形 ******知识点:嵌套for ...
- response的字节流和字符流输入的区别和问题--02-response的outputStream输出数据的问题.avi
02-response的outputStream输出数据的问题.avi; [字节流] 用meta标签 第一段原始代码:写错: 03-response的Writer输出数据的问题.avi;[字符流输出] ...