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. phpunit Cannot redeclare class PHPUnit_Runner_Version

  2. mysql反向解析导致连接缓慢

    Content 0.序 1.问题 2.原因 3.解决办法 0.序 本文主要是记录Mysql安装在 VMWARE下,本地连接Mysql速度很慢的原因及解决办法. 1.问题 本地的一个网站使用mysql数 ...

  3. Git_忽略特殊文件

    有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示“Untracked files ...”,有强迫症的童鞋心里 ...

  4. MySQLAdmin的用法

    mysqladmin 适合于linux和windows系统 linux下:mysqladmin -u[username] -p[password] status windows下:先在安装目录找到my ...

  5. 使用Chrome快速实现数据的抓取(二)——协议

    在前面的文章简单的介绍了一下Chrome调试模式的启动方式,但前面的API只能做到简单的打开,关闭标签操作,当我们需要对某个标签页进行详细的操作时,则需要用到页面管理API.首先我们还是来回顾下获取页 ...

  6. ARM JTAG 20

    http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0499b/BEHEIHCE.html he ARM JTAG 20 co ...

  7. ELMAH--Using HTTP Modules and Handlers to Create Pluggable ASP.NET Components 77 out of 90 rated th

    MSDN===http://msdn.microsoft.com/en-us/library/aa479332.aspx PROJECT==https://code.google.com/p/elma ...

  8. MVC实现文件下载

    □ 思路 点击一个链接,把该文件的Id传递给控制器方法,遍历文件夹所有文件,根据ID找到对应文件,并返回FileResult类型. 与文件相关的Model: namespace MvcApplicat ...

  9. 各种语言的注释总结--from wiki

    Comments can be classified by: style (inline/block) parse rules (ignored/interpolated/stored in memo ...

  10. css3 3d展示中rotate()介绍与简单实现

    最近在了解css3的3d动画效果,学习发现,css3中的3d效果实现还是很好玩的,现在我给你大家简单的介绍一下css3中3d效果的实现. 我也只是一个初学者,如果在博客中写的不对的地方欢迎指正. 好了 ...