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通信的更多相关文章

  1. 【Android开发】之Fragment与Acitvity通信

    上一篇我们讲到与Fragment有关的常用函数,既然Fragment被称为是“小Activity”,现在我们来讲一下Fragment如何与Acitivity通信.如果上一篇还有不懂得,可以再看一下.传 ...

  2. Fragment间的通信

    在网上看到的一篇文章,总结的很好 为了重用Fragment的UI组件,创建的每个Fragment都应该是自包含的.有它自己的布局和行为的模块化组件.一旦你定义了这些可重用的Fragment,你就可以把 ...

  3. Fragment之间的通信(四)

    自定义两个fragment的布局和java类. 在mainactivity中引用布局文件 在其中的一个fragment中的控件上添加监听,获取到另一个fragment中控件的内容,展示出来完成frag ...

  4. Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信

    以下内容为原创,转载请注明:http://www.cnblogs.com/tiantianbyconan/p/3364728.html 我前两天写过一篇博客<Android使用Fragment来 ...

  5. Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信

    以下内容为原创,转载请注明:http://www.cnblogs.com/tiantianbyconan/p/3360938.html 如新浪微博下面的标签切换功能,我以前也写过一篇博文(http:/ ...

  6. Fragment之间的通信

    在本节中,你会学到 1.定义接口 2.实现接口 3.将消息传递给fragment 为了重用Fragment UI 组件,在设计中你应该通过定义每一个fragemnt自己的layout和行为,让frag ...

  7. 利用Fragment创建动态UI 之 Fragment之间的通信

    为了可以复用一个fragment,所以在定义fragment的时候,要把它定义为一个完全独立和模块化,它有它自己的layout和行为.当你定义好了这些可复用的fragment,可以把他们和activi ...

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

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

  9. Fragment的生命周期&同一Activity下不同Fragment之间的通信

    Android开发:碎片Fragment完全解析(2) Fragment的生命周期 和Activity一样,Fragment也有自己的生命周期,理解Fragment的生命周期非常重要,我们通过代码的方 ...

随机推荐

  1. 外部程序调用Django模块的解决办法

    Question django.core.exceptions.ImproperlyConfigured: Requested setting CACHES, but settings are not ...

  2. 安装Rational Rose后提示java.lang.ClassNotFoundException

    1. 在运行中输入regedit回车,打开注册表编辑器2. 搜索 TrustedClasspath [REG_SZ] ,因为64位和32位不一样. 4.添加值c:\windows\java\trust ...

  3. Docker(五)如何构建Dockerfile

    摘自 https://mp.weixin.qq.com/s/_hq9dPe6390htN8BTkoQeQ 一.Dockerfile的指令集 由于Dockerfile中所有的命令都是以下格式:INSTR ...

  4. Vue学习第一天:Vue.js指令系统

    1. 如何使用Vue.js? 1.1 直接引入 - <script src="./statics/vue.min.js"></script> - 引入之后在 ...

  5. lua与C/C++交互概要

    转 http://blog.csdn.net/wildfireli/article/details/22307635 Lua生来就是为了和C交互的,因此使用C扩展Lua或者将Lua嵌入到C当中都是非常 ...

  6. web 安全知识点

    XSS 新手指南:DVWA-1.9全级别教程(完结篇,附实例)之XSS https://www.jianshu.com/p/303206ae2471 https://www.netsparker.co ...

  7. git操作远程仓库

    1.在本地电脑的上生成ssh-key ssh-keygen -t rsa -C "youremail@126.com" 可以在用户主目录里找到.ssh目录,里面有id_rsa和id ...

  8. 在eclipse中从cvs下载项目,再部署到tomcat常见错误!

    1.先调出cvs视图 如果cvs插件还未安装,下载一个: 安装cvs插件:将features和pluguns文件夹里面的内容分别复制到eclipse安装路径下面对应的features和pluguns文 ...

  9. gitbash使用git 命令的准备工作

    1.git下载 2.git clone http://git.missfresh.cn/... 配置用户名密码 3.git  常用命令简写配置 git config --global alias.st ...

  10. JAVA并行异步编程,线程池+FutureTask

    java 在JDK1.5中引入一个新的并发包java.util.concurrent 该包专门为java处理并发而书写. 在java中熟悉的使用多线程的方式为两种?继续Thread类,实现Runnal ...