fragment bundle传值 怎么读取call值传给下一个activity

用户名:钓伯乐
文章数:50
访问量:14820
注册日期:
阅读量:1297
阅读量:3317
阅读量:581691
阅读量:466229
51CTO推荐博文
1、Activity &---& & Fragment &Activity一般先传递给FragmentActivity,通过FAct传给附属Fragment2、Activity &---& & FragmentActivity &通过Intent传递 &如果涉及加载模式传递参数的话,需要通过&onNewIntent(Intent intent) 获取intent, getIntent()已经被onNewIntent()拦截3、Fragment &---& & Fragemt Fragment之间相互切换通过bundle,setArguments传递数据4、FragmentActivity &---& & Fragment 通过接口传递数据,因为Arguments在一开始创建Fragment就必须传进去,要是再次设置报java.lang.IllegalStateException: Fragment already active 异常12-19&10:28:01.393:&E/AndroidRuntime(25224):&java.lang.IllegalStateException:&Fragment&already&active
12-19&10:28:01.393:&E/AndroidRuntime(25224):&at&android.support.v4.app.Fragment.setArguments(Fragment.java:530)
12-19&10:28:01.393:&E/AndroidRuntime(25224):&at&com.pupuwang.sjzx.fragment.HomeFragment.setArguments(HomeFragment.java:198)
12-19&10:28:01.393:&E/AndroidRuntime(25224):&at&com.pupuwang.sjzx.fragment.FragmentMainActivity.setFragmentIndicator(FragmentMainActivity.java:46)
12-19&10:28:01.393:&E/AndroidRuntime(25224):&at&com.pupuwang.sjzx.fragment.FragmentMainActivity.onNewIntent(FragmentMainActivity.java:77)
12-19&10:28:01.393:&E/AndroidRuntime(25224):&at&android.app.Instrumentation.callActivityOnNewIntent(Instrumentation.java:1156)
12-19&10:28:01.393:&E/AndroidRuntime(25224):&at&android.app.ActivityThread.deliverNewIntents(ActivityThread.java:2454)
12-19&10:28:01.393:&E/AndroidRuntime(25224):&at&android.app.ActivityThread.performNewIntents(ActivityThread.java:2467)
12-19&10:28:01.393:&E/AndroidRuntime(25224):&at&android.app.ActivityThread.handleNewIntent(ActivityThread.java:2476)
12-19&10:28:01.393:&E/AndroidRuntime(25224):&at&android.app.ActivityThread.access$1400(ActivityThread.java:157)
12-19&10:28:01.393:&E/AndroidRuntime(25224):&at&android.app.ActivityThread$H.handleMessage(ActivityThread.java:1412)
12-19&10:28:01.393:&E/AndroidRuntime(25224):&at&android.os.Handler.dispatchMessage(Handler.java:99)
12-19&10:28:01.393:&E/AndroidRuntime(25224):&at&android.os.Looper.loop(Looper.java:153)
12-19&10:28:01.393:&E/AndroidRuntime(25224):&at&android.app.ActivityThread.main(ActivityThread.java:5326)
12-19&10:28:01.393:&E/AndroidRuntime(25224):&at&java.lang.reflect.Method.invokeNative(Native&Method)
12-19&10:28:01.393:&E/AndroidRuntime(25224):&at&java.lang.reflect.Method.invoke(Method.java:511)
12-19&10:28:01.393:&E/AndroidRuntime(25224):&at&com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:848)
12-19&10:28:01.393:&E/AndroidRuntime(25224):&at&com.android.internal.os.ZygoteInit.main(ZygoteInit.java:615)
12-19&10:28:01.393:&E/AndroidRuntime(25224):&at&dalvik.system.NativeStart.main(Native&Method)fragment之间参数传递public&static&HomeFragment&newInstance(int&index)&{
HomeFragment&hf&=&new&HomeFragment();
Bundle&bundle&=&new&Bundle();
bundle.putInt("index",&index);
hf.setArguments(bundle);
Log.e(TAG,&"--------index------:"&+index);
public&int&getShownIndex()&{
Bundle&bundle&=&getArguments();
if(bundle==null){
return&-1;
return&bundle.getInt(IntentKeys.SHOP_INFO,&0);
}接口回调传递参数注意要在fragment中的此方法中转换下@Override
public&void&onAttachFragment(Fragment&fragment)&{
&&&&&&&&if(fragment&instanceof&IBtnCallListener){
&&&&&&&&&&&&mbtnListener&=&(IBtnCallListener)&
&&&&&&&&}else&if(fragment&instanceof&IFragmentArguments){
&&&&&&&&&&&&mIFragArg&=&(IFragmentArguments)
&&&&}&catch&(Exception&e)&{
&&&&&&&&//&TODO:&handle&exception
&&&&super.onAttachFragment(fragment);
}通过自定义接口回调public&interface&IFragmentArguments&{
&&&&public&void&setIArguments(Bundle&bundle);
}本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)1216人阅读
Android基础(27)
在开发中,Activity之间通过Intent使用bundle,fragment之间和Activityty通过setArguments使用bundle,对于一些简单的参数传递比较简单,而且方式也有多种,这个就不介绍了。在这里介绍一下复杂的参数传递,比如传递集合ArrayList,对象ArrayList&Object&。
& & & &无论是Activity之间参数传递,还是Fragment之间参数传递,或者是Activity与Fragment之间,都要使用Bundle,方式基本相同。Bundle在这里就相当与一个介质,把数据捆绑在一起;
但是对于一些对象的传递,我们则需要把被传递的对象需要先实现序列化,而序列化对象有两种方式:java.io.Serializable和android.os.Parcelable
Java中使用的是Serializable,而谷歌在Android使用了自定义的Parcelable。
两种序列化方式的区别:
1.在使用内存的时候,Parcelable比Serializable性能高,推荐使用Parcelable类;
2.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC;
3.Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下,这种情况建议使用Serializable。
Activity跳转到另一个Activity,
第一步 ;定义序列化实体类
Serializable方式:
第二步;传递序列化对象对象
第三步;接收序列化对象
Activity传递参数到fragment
Parcelable方式
第一步 ;定义序列化实体类
第二步,传递序列化对象
第三步;接收参数
总结,传递对象可以通过Serializable和Parcelable,无论是Activity之间还是fragment之间或者Activity和fragment之间的参数传递,都大同小异,切记被传递的对象要实现Serializable和Parcelable;Serializable相对比较简单很多。使用哪一种方式视情况而定。
转自:http://blog.csdn.net/Kern_/article/details/
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:91353次
积分:1867
积分:1867
排名:千里之外
原创:114篇
转载:27篇
评论:12条
(6)(11)(5)(1)(2)(2)(5)(22)(25)(50)(10)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'博客分类:
1.一个FragmentActivity(FragmentsActivity)
2.一个ListFragment(Fragment1),其中有很多标题
3.点击其中一个标题,跳转到一个Fragment(Fragment2),并在此显示点击的标题
注意到Fragment可以通过setArguments和getArguments来通过Bundle传值,在ListFragment的点击事件中,将得到的标题,存放到一个Bundle中,传递到Fragment中,再去设置Fragment中的标题为点击的文字。
Fragment中
public class Fragment2 extends Fragment {
private static B
static Fragment2 newInstance(Bundle b){
Fragment2 f2 = new Fragment2();
return f2;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment2, container,false);
TextView title = (TextView)v.findViewById(R.id.title2);
title.setText(bundle.getString("title"));
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Fragment的布局
&?xml version="1.0" encoding="utf-8"?&
&LinearLayout xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" &
android:id="@+id/title2"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:text="class test"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="4"
android:background="@android:color/holo_green_light"
android:gravity="top"
&/LinearLayout&
设置EditText的光标指向第一行
android:gravity="top"
ListFragment中
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
System.out.println(l.getChildAt(position));
HashMap&String, Object& view= (HashMap&String, Object&) l.getItemAtPosition(position);
String title = view.get("title").toString();
Bundle b = new Bundle();
b.putString("title", title);
Fragment2 f2 = Fragment2.newInstance(b);
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragments, f2).commit();
效果:点击class 3
crazysumer
浏览: 29132 次
&div class=&quote_title ...
R.layout.item_list没放出来。
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'Android 笔记-Fragment 与 Activity之间传递数据
Fragment 与 Activity之间传递数据有两种方法,一种是使用setArgument,一种是使用接口回调。下面先学习第一种方法。
(1)使用setArgument方法:
为了便于理解,我在这里打个比喻:假如Activity是皇帝,它设立了三个部门(如三省六部),分别是Fragment1,Fragment2和Fragemnt3;
现在他现在要吩咐部门Fragment1去做一些事情,比如说:领兵攻打岛国!!好,它肯定不自己跑去告诉该部门的。
一般来说,会有个宰相或者太监总管来负责皇帝口谕是吧;这个太监总管就是FragmentManager。然后,当然,
太监总管也是不会亲自跑过去的,这时候有个名叫FragmentTransaction
的事务太监,总的来说,
它就负责三件事情:add(), remove(), replace(),按照皇帝的意思去增加一个部门,撤销一个部门,和替换掉一个部门。
现在这个事务太监有新任务了,就是增加一个部门,然后告诉它去攻打岛国。好。把内容“带兵攻打岛国”装到信封里
(信封就是Bundle)。注意到,这是密令,当然要做个记号什么的来标记一下,就是加上Tag,这里我们指定是“179521”。
最后绑在白鸽上发送出去(commit())。
vcD4KPHByZSBjbGFzcz0="brush:">@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事务
上面那个比喻不是十分恰当,现在用正式的语言来说明下哈:
要是你熟悉Activity的生命周期,应该知道每一个应用都有一个独一无二的Task,Task里有个回退栈backstack,存储Activity的窗口实例对象;
由于Fragment也是有窗口实例对象的,因此它出现时也是要进入到回退栈的。
使用Fragment,为了让用户或者开发者来执行对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取出对应的内容。
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例子。Fragment与Activity之间的数据交换,大体上包括三种:
一、Fragment从Activity获取数据(本文章只介绍第一种);
二、Activity从Fragment获取数据;
三、Fragment之间获取数据。
实现效果图:
从Activity传递数据到两个Fragment中,Fragment获取数据后,展示出来。
布局文件:
activity_main:
MyFragment1的布局文件f1:
MyFragment2的布局文件f2:
代码文件:
MainActivity:
MyFragment1:
MyFragment2:
本文已收录于以下专栏:
相关文章推荐
Fragment与Activity之间的数据交换,大体上包括三种:
一、Fragment从Activity获取数据(本文章只介绍第一种);
二、Activity从Fragment获取数据;
在fragment里边
Activity传递给Fragment的数据 可以附加argument给Fragment来实现,需要调用Fragment.setArguments(Bundle)方法。注意,该任务必须在Fragmen...
1概念1 为什么因为Fragment和Activity一样是具有生命周期,不是一般的bean通过构造函数传值,会造成异常。2 参考链接Activity和Fragment传递数据的两种方式【Fragme...
转载请标明出处:http://blog.csdn.net/lmj/article/details/、概述Android提供了几种动画类型:View Animatio...
在Android开发中,Activity之间通过Intent使用bundle,fragment之间和Activityty通过setArguments使用bundle,对于一些简单的参数传递比较简单,而...
1、第一种方式,也是最常用的方式,就是使用Bundle来传递参数 MyFragment myFragment = new MyFragment();
Bundle bundle = n...
为什么要用Fragment?使用Fragment可以在一个Activity中实现不同的界面。Fragment与Fragment之间的动画切换,远比Activity与Activity之间的...
Fragment获取它所在的Activity:调用Fragment的getActivity()方法即可返回它所在的Activity
Activity获取它包含的Fragment:调用Activity...
与activity通讯
尽管fragment的实现是独立于activity的,可以被用于多个activity,但是每个activity所包含的是同一个fragment的不同的实例。
Fragment可...
他的最新文章
讲师:汪剑
讲师:刘道宽
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 activity传值fragment 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信