Fragment 与 Activity之间传递数据有两种方法。一种是使用setArgument,一种是使用接口回调。以下先学习第一种方法。

1)使用setArgument方法:

为了便于理解,我在这里打个比喻:假如Activity是皇帝,它设立了三个部门(如三省六部)。各自是Fragment1,Fragment2和Fragemnt3;

如今他如今要吩咐部门Fragment1去做一些事情,比方说:领兵攻打岛国!!好,它肯定不自己跑去告诉该部门的。

一般来说,会有个宰相或者太监总管来负责皇帝口谕是吧;这个太监总管就是FragmentManager。然后,当然。

太监总管也是不会亲自跑过去的,这时候有个名叫FragmentTransaction  的事务太监,总的来说,

它就负责三件事情:add(), remove(), replace()依照皇帝的意思去添加一个部门,撤销一个部门,和替换掉一个部门。

如今这个事务太监有新任务了。就是添加一个部门,然后告诉它去攻打岛国。

好。

把内容“带兵攻打岛国”装到信封里

(信封就是Bundle)。注意到,这是密令,当然要做个记号什么的来标记一下。就是加上Tag,这里我们指定是“179521”。

最后绑在白鸽上发送出去(commit())。

<pre name="code" class="java">@Override
public void onClick(View arg0) {
if (arg0.getId()==R.id.send_data_btn) {
LeftFragment fragment = new LeftFragment();
Bundle bundle = new Bundle();
bundle.putString("order", "带兵攻打岛国");
fragment.setArguments(bundle);
FragmentManager fragmentManager = getFragmentManager();
//開始Fragment事务
FragmentTransaction fTransaction = fragmentManager.beginTransaction();
//将Fragment加入到事务中,并指定一个TAG
fTransaction.add(fragment, "179521");
//提交Fragment事务
fTransaction.commit();
} }

上面那个比喻不是十分恰当。如今用正式的语言来说明下哈:

要是你熟悉Activity的生命周期。应该知道每个应用都有一个独一无二的Task,Task里有个回退栈backstack。存储Activity的窗体实例对象;

因为Fragment也是有窗体实例对象的,因此它出现时也是要进入到回退栈的。

使用Fragment。Android为了让用户或者开发人员来运行对Fragment的管理,比方说添加,移除和替换等。

从Android3.0后有一个类。

FragmentManager专门用来管理Fragment,可是它不亲自运行详细动作。而是使用一个对象,片段事务,FragmentTransaction,

应该认识到的是 每一个FragmentTransaction是一组同一时候运行的变化的集合。比方说同一时候加入2个Fragment,然后删除当中一个。

这都是同一时候运行的。用add(),remove(), replace()方法。把全部须要的变化加进去,然后调用commit()方法,将这些变化应用。

在commit()方法之前。你能够调用addToBackStack()。把这个transaction增加backstack中去,这个back stack是由activity

管理的。当用户按返回键时,就会回到上一个fragment的状态。

在Fragment接收数据:

得到FragmentManager,然后依据标签Tag和key取出相应的内容。

<pre name="code" class="java">@Override
public void onClick(View arg0) {
if (arg0.getId()==R.id.get_data_btn) {
String name = getFragmentManager().findFragmentByTag("179521").getArguments().getString("order");
Toast.makeText(getActivity(), "命令是"+name, Toast.LENGTH_SHORT).show();
}
}

结果例如以下:

明天再把回调的方法写上。

先上传第一个方法的DEMO样例。

例程下载

Android 笔记-Fragment 与 Activity之间传递数据的更多相关文章

  1. [android] 在不同的activity之间传递数据

    新建一个activity,继承Activity 清单文件中进行配置,添加<activity/>节点 设置名称 android:name=”.类名” 点 代表的是当前包名,也可以不写 新建一 ...

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

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

  3. 【Android 复习】 : Activity之间传递数据的几种方式

    在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式. 1. 使用Intent来传递数据 Intent表示意图,很多时 ...

  4. Activity之间传递数据或数据包Bundle,传递对象,对象序列化,对象实现Parcelable接口

    package com.gaojinhua.android.activitymsg; import android.content.Intent; import android.os.Bundle; ...

  5. 28、activity之间传递数据&批量传递数据

    import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android ...

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

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

  7. 在activity之间传递数据

    在activity之间传递数据 一.简介 二.通过intent传递数据 1.在需要传数据的界面调用 intent.putExtra("data1", "我是fry&quo ...

  8. Activity之间传递数据的方式及常见问题总结

    Activity之间传递数据一般通过以下几种方式实现: 1. 通过intent传递数据 2. 通过Application 3. 使用单例 4. 静态成员变量.(可以考虑 WeakReferences) ...

  9. Android基础 -- Activity之间传递数据(bitmap和map对象)

    原文:http://blog.csdn.net/xueerfei008/article/details/23046341 做项目的时候需要用到在2个activity之间传递一些数据,之前做的都是些字符 ...

随机推荐

  1. Linux下Nginx+多Tocat下的负载均衡环境的简单搭建

    本文主要分为四个部分: 1.Nginx的搭建:2.JDK+Tomcat的搭建:3.静态HTML的访问配置:4.负载均衡的配置 ===================================== ...

  2. php远程获取图片或文件信息(get_headers,fsocketopen,curl)

    <?php if(!function_exists("remote_filesize")){ /** * 获取远程或本地文件信息 * @param string $strUr ...

  3. IIS Express并发数设置

    今天将之前的一个瓦片图的服务迁移到了asp.net core试了一下,使用的时候感觉客户端刷新时有些慢,估计是并发连接数限制的原因. 由于这是一个开发中的版本,是用IIS Express部署的,IIS ...

  4. FolderSync Instant sync 即时同步

    Folderpairs - Edit folderpair - Sync options - Instant sync  Select this for instant sync on change. ...

  5. VPP电源控制(VPP Power)-- 由DC-DC变换集成电路MC34063组成

    http://www.willar.com/article/article_view.asp?id=463 由DC-DC变换集成电路MC34063组成,34063 广泛应用于于DC-DC的电源转换电路 ...

  6. 在win7下安装VC6.0

    一.以系统管理员的身份执行VC6.0安装文件 二.在安装或者使用VisualC++6.0时,凡是出现兼容性问题提示对话框,一律按下面方式处理--把"不再显示此消息"打上勾,然后选择 ...

  7. C#编程(六)------------枚举

    原文链接:http://blog.csdn.net/shanyongxu/article/details/46423255 枚举 定义枚举用到的关键字:enum public enum TimeOfD ...

  8. 【ELK】【docker】【elasticsearch】1. 使用Docker和Elasticsearch+ kibana 5.6.9 搭建全文本搜索引擎应用 集群,安装ik分词器

    系列文章:[建议从第二章开始] [ELK][docker][elasticsearch]1. 使用Docker和Elasticsearch+ kibana 5.6.9 搭建全文本搜索引擎应用 集群,安 ...

  9. TPL中限制进程数量

    The MaxDegreeOfParallelism sets the maximum number of simultaneous threads that will be used for the ...

  10. Spring-4.0 + Quartz-2.2.1 集群实例(Tomcat+Memcached+Quartz集群session共享)还是没有解决Serializable序列化