https://blog.csdn.net/u012702547/article/details/49786417

https://blog.csdn.net/carson_ho/article/details/75453770

一、接口方式
在fragment类中定义一个接口并在Activity中实现它。Fragment在onAttach()回调函数中获取接口的具体实现的对象。后面,fragment就可以调用接口中的方法实现与Activity的通信。

在Android5.0之后废除了onAttach(Activity activity)的方法,转而使用onAttach(Context context),也就是传递的参数发生变化

  1. public interface showMsgListener{
  2. void showMsg(String str);
  3. }
  4. private showMsgListener msgListener;
  5. @Override
  6. public void onAttach(Activity activity) {
  7. super.onAttach(activity);
  8. try {
  9. if(activity!=null){
  10. msgListener=(MainActivity)activity;
  11. }
  12. } catch (ClassCastException e) {
  13. throw new ClassCastException(activity.toString()
  14. + " must implement showMsgListener");
  15. }
  16. }
  17. mButton.setOnClickListener(new View.OnClickListener() {
  18. @Override
  19. public void onClick(View view) {
  20. msgListener.showMsg("Hello Android!(接口)");
  21. }
  22. });

在Activity中需要实现该接口

  1. @Override
  2. public void showMsg(String str) {
  3. Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
  4. }

二、广播

在Activity中注册广播接收器,在Fragment中发送广播

  1. private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
  2. @Override
  3. public void onReceive(Context context, Intent intent) {
  4. String action = intent.getAction();
  5. if (action.equals(ACTION_NAME)) {
  6. String msg = intent.getStringExtra("msg");
  7. Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
  8. }
  9. }
  10. };
  11. public void registerBoradcastReceiver() {
  12. IntentFilter myIntentFilter = new IntentFilter();
  13. myIntentFilter.addAction(ACTION_NAME);
  14. registerReceiver(mBroadcastReceiver, myIntentFilter);
  15. }
  16. @Override
  17. protected void onDestroy() {
  18. super.onDestroy();
  19. unregisterReceiver(mBroadcastReceiver);
  20. }

三、Fragment 从Activity获取数据

在Fragment 的getInstance()方法中setArguments()设置参数

  1. public static Fragment getInstance(String msg){
  2. Bundle bundle = new Bundle();
  3. bundle.putString("msg",msg);
  4. MainFragment fragment=new MainFragment();
  5. fragment.setArguments(bundle);
  6. return fragment;
  7. }

再通过getArguments()方法获取

  1. public void initDatas() {
  2. Bundle bundle=getArguments();
  3. if(bundle!=null){
  4. String msg=bundle.getString("msg");
  5. Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT).show();
  6. }
  7. }

Fragment与Activity之间的相互通信的更多相关文章

  1. Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

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

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

  3. 适配器(adapter)与fragment之间、fragment与activity之间的通信问题

    一.适配器(adapter)与fragment之间通信 通过本地广播进行通信 步骤如下 在adapter中代码 声明本地广播管理 private LocalBroadcastManager local ...

  4. 安卓Fragment和Activity之间的数据通讯

    Fragment是Android3.0之后才推出来的.可以用来做底部菜单,现在很多APP都有用到这个底部菜单.当然TabHost也可以用来做底部菜单,但是Fragment来做,动画效果这些可以做得更炫 ...

  5. Android Fragment与Activity之间的数据交换(Fragment从Activity获取数据)

    Fragment与Activity之间的数据交换,通常含有3: 一.Fragment从Activity获取数据(仅本文介绍了一个第一): 两.Activity从Fragment获取数据: 三.Frag ...

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

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

  7. Fragment与Activity之间的通信

      我个人将Fragment与Activity间的通信比喻为JSP与Servlet间的通信,fragment中用接口的方式来进行与Activity的通信.通信的结果可以作为数据传入另一个Fragmen ...

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

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

  9. Fragment和activity之间的通信

    1>fragment可以调用getactivity()方法获取它所在的activity. 2>activity可以调用FragmentManager的findFragmentById()或 ...

随机推荐

  1. LAMP和LNMP去除index.php访问

    使用TP或者Laravel开发的时候,后时候会遇到需要加index.php才能正常访问 LAMP解决方法 1.修改配置 打开配置文件(如:httpd.conf),找到你网站根目录的配置,将AllowO ...

  2. python中json.load()、json.loads()、json.dump()、json.dumps()的区别

    json.load()从文件中读取json字符串 json.loads()将json字符串转换为字典类型 json.dumps()将python中的字典类型转换为字符串类型 json.dump()将j ...

  3. PHP 判断浏览器语言

    详情请参看代码 作用:判断当前的浏览器语言.接收传入参数.拼接字符串 <?php $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2); if ...

  4. Intent 跳转Activity

    Intent 跳转 显示跳转(用类名跳转) Intent i = new Intent(a.this,b.class); 隐士跳转 自定义Action <!--配置跳转Activity--> ...

  5. CF815D Karen and Cards

    CF815D Karen and Cards 固定一维c,然后(a,b)看成坐标,矩形区域求交 1.Segment tree Beats! 2.改成不合法的区域就是求并,c反向枚举,区域只增不减且完全 ...

  6. 百度地图infoWindow圆角处理

    最近的一个项目用到了百度地图API里边的infoWindow弹框,但是百度自带的infoWindow弹框是个直角的矩形框,显示过于难看,于是有了将该框改为圆角的想法,但是API本身不支持样式的设置,所 ...

  7. mysql存储过程和常用流程控制

    /* 该代码是创建了一个名叫"p4"的存储过程并设置了s1,s2,s3两个int型一个varchar型参数,还可以是其他数据类型,内部创建了x1,x2两个变量 DELIMITER是 ...

  8. (Java)入门训练 斐波那契数列

    问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n ...

  9. python中的os模块

    os模块 os模块的作用: os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/删除某个文件/获取文件大小…… 另 ...

  10. nxlog windows安装部署

    nxlog 介绍 nxlog 是用 C 语言写的一个跨平台日志收集处理软件.其内部支持使用 Perl 正则和语法来进行数据结构化和逻辑判断操作.不过,其最常用的场景.是在 windows 服务器上,作 ...