Android笔记Fragment与Activity之间传递数据
2015-01-27 18:45
561 查看
Fragment 与 Activity之间传递数据有两种方法,一种是使用setArgument,一种是使用接口回调。下面先学习第一种方法。
(1)使用setArgument方法:
为了便于理解,我在这里打个比喻:假如Activity是皇帝,它设立了三个部门(如三省六部),分别是Fragment1,Fragment2和Fragemnt3;
现在他现在要吩咐部门Fragment1去做一些事情,比如说:领兵攻打岛国!!好,它肯定不自己跑去告诉该部门的。
一般来说,会有个宰相或者太监总管来负责皇帝口谕是吧;这个太监总管就是FragmentManager。然后,当然,
太监总管也是不会亲自跑过去的,这时候有个名叫FragmentTransaction 的事务太监,总的来说,
它就负责三件事情:add(), remove(), replace(),按照皇帝的意思去增加一个部门,撤销一个部门,和替换掉一个部门。
现在这个事务太监有新任务了,就是增加一个部门,然后告诉它去攻打岛国。好。把内容“带兵攻打岛国”装到信封里
(信封就是Bundle)。注意到,这是密令,当然要做个记号什么的来标记一下,就是加上Tag,这里我们指定是“179521”。
最后绑在白鸽上发送出去(commit())。
[/code]
(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取出对应的内容 [code]<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(); } }结果如下:
[/code]
相关文章推荐
- Android 笔记-Fragment 与 Activity之间传递数据
- Android 笔记-Fragment 与 Activity之间传递数据
- Android笔记Fragment与Activity之间传递数据
- Android 笔记-Fragment 与 Activity之间传递数据
- Android开发笔记---不同activity之间的数据传递
- Android 数据传递(二)Activity与fragment之间的通信
- android bundle存放数据详解,activity与activity之间数据传递,fragment与fragment之间数据传递
- [Android新手学习笔记05]-如何进行活动Activity之间的跳转以及数据传递
- Android笔记(四) Activity之间的数据传递
- Android笔记--简单的Fragment和Activity的之间的数据交互(传值)
- Android自学笔记(四)Activity之间传递数据
- Android-Activity与Fragment之间传递数据
- Android 数据传递(二)Activity与fragment之间的通信
- 67.android布局-Fragment与Activity之间传递数据
- Android开发修改DialogFragment样式以及与activity之间的数据传递
- Android笔记三.不同Activity之间的传递数据(Bundle对象的使用)
- Android编程学习笔记 之 Fragment与Activity的数据传递
- Android中Activity和Fragment之间数据传递(例子中也有事务加载Fragment)
- Activity与Fragment数据传递之Fragment之间获取数据 分类: Android 2015-07-02 10:33 11人阅读 评论(0) 收藏
- Activity与Fragment数据传递之Activity之间获取数据 分类: Android 2015-07-02 10:13 10人阅读 评论(0) 收藏