Android 笔记-Fragment 与 Activity之间传递数据
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之间传递数据的更多相关文章
- [android] 在不同的activity之间传递数据
新建一个activity,继承Activity 清单文件中进行配置,添加<activity/>节点 设置名称 android:name=”.类名” 点 代表的是当前包名,也可以不写 新建一 ...
- Android Fragment与Activity之间的数据交换(Fragment从Activity获取数据)
Fragment与Activity之间的数据交换,通常含有3: 一.Fragment从Activity获取数据(仅本文介绍了一个第一): 两.Activity从Fragment获取数据: 三.Frag ...
- 【Android 复习】 : Activity之间传递数据的几种方式
在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式. 1. 使用Intent来传递数据 Intent表示意图,很多时 ...
- Activity之间传递数据或数据包Bundle,传递对象,对象序列化,对象实现Parcelable接口
package com.gaojinhua.android.activitymsg; import android.content.Intent; import android.os.Bundle; ...
- 28、activity之间传递数据&批量传递数据
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android ...
- 安卓Fragment和Activity之间的数据通讯
Fragment是Android3.0之后才推出来的.可以用来做底部菜单,现在很多APP都有用到这个底部菜单.当然TabHost也可以用来做底部菜单,但是Fragment来做,动画效果这些可以做得更炫 ...
- 在activity之间传递数据
在activity之间传递数据 一.简介 二.通过intent传递数据 1.在需要传数据的界面调用 intent.putExtra("data1", "我是fry&quo ...
- Activity之间传递数据的方式及常见问题总结
Activity之间传递数据一般通过以下几种方式实现: 1. 通过intent传递数据 2. 通过Application 3. 使用单例 4. 静态成员变量.(可以考虑 WeakReferences) ...
- Android基础 -- Activity之间传递数据(bitmap和map对象)
原文:http://blog.csdn.net/xueerfei008/article/details/23046341 做项目的时候需要用到在2个activity之间传递一些数据,之前做的都是些字符 ...
随机推荐
- Linux中文件/文本的中文乱码解决方法
Linux显示在Windows编辑过的中文就会显示乱码是由于两个操作系统使用的编码不同所致.Linux下使用的编码是utf8,而Windows使用的是gb18030.因此,解决Linux打开txt/c ...
- Vanish 详解
1.varnish 概述: varnish是一款高性能且开源的方向代理服务器和HTTP加速器,它的开发者poul-Henning kamp FreeBSD 核心的开发人员之一.varnish采 ...
- 追踪CPU跑满
http://blog.donghao.org/2014/04/24/%e8%bf%bd%e8%b8%aacpu%e8%b7%91%e6%bb%a1/
- .Net C#向远程服务器Api上传文件
Api服务代码一: /// <summary> /// 服务器接收接口 /// </summary> [HttpPost] [Route("ReceiveFile&q ...
- Bootstrap 3之美04-自定义CSS、Theme、Package
本篇主要包括: ■ 自定义CSS■ 自定义Theme■ 自定义Package 自定义CSS 有时候,需要自定义或重写Bootstrap默认的CSS.→在css文件夹下创建一个site.css→假 ...
- java基础之hashcode理解及hashmap实现原理及MD5
HashCode值 1. hashcode值是int的,64位.int hashCode(). 2. java object类默认的hashcode()计算方法是根据对象的内存地址来计算的.所以可由此 ...
- Vmware esx/esxi Vlan三种配置模式(VST、EST和VGT)
在Vmware esx/esxi中使用虚拟Lan(Vlan)时,一般是指Vlan Trunk的使用,使用的Vlan配置还有其它三种类型: Virtual Switch Tagging(虚拟交换机标记, ...
- Excel 批量快速合并相同的单元格:数据透视表、宏代码、分类汇总
Excel 批量快速合并相同的单元格 在制作Excel表格的时候,为了使得自己制作的报表更加简洁明了,方便查阅,经常需要合并很多相同的单元格,如果有几千几万条记录需要合并的话,真的会让人发疯.怎样 ...
- C/C++/Java 程序计时功能函数
编写程序肯定要使用计时功能,来判断程序的执行时间.今天Google了一下,自己就梳理总结一下: (1)C/C++程序计时 C/C++中使用的计时函数是clock(). C语言中的头文件对应是#incl ...
- SCSI contrller的几种类型的区别
在VMware vSphere Web Client中, 可以为虚拟机添加一个新的SCSI controller, 选项中包含如下的类型, 那么他们有什么区别呢? 如何选择呢? BusLogic ...