acvitity向Fragment传值跳转问题
来源:互联网 发布:女生舍不得买衣服知乎 编辑:程序博客网 时间:2024/06/02 04:40
整理Fragment与Activity之间的数据交换,大体上包括三种:1、Fragment从Activity获取数据2、Activity从Fragment获取数据3、Fragment之间获取数据 通常,如果Activity向不同的Activity传递数据,最常用的是通过Intent.putExtra()方法,将简单类型的数据或可序列化的数据保存在Intent对象中,然后在目标Activity中使用getXxx(getInt,getString等)方法获得这些数据。 从Activity向Fragment中传递数据可以Fragment.getArguments方法向Fragment传递参数值,并且通过Fragment.getArguments方法获取传递的参数值。 从Fragment向Actvity中传递数据采用接口回调的方式实现数据的传递。 Fragment从Activity获取数据的三种方法:要实现的功能:用Fragment显示从其所在的Acitivity1中获取到的数据。法一:直接在Fragment中getActivity.getIntent()...这样就能拿到Activity1的参数。getActivity()指向的就是Activity1,当然可以直接getIntent()。 Intent intent = new Intent(getActivity(),MyOrder.class); String result = getActivity().getIntent().getStringExtra("result"); intent.putExtra("result", result); startActivity(intent); 这样直接在Fragment的onCreate中,拿到宿主Activty,宿主Activity中肯定能通过getIntent拿到Intent,然后通过get方法,随意拿参数~~这么写,功能上是实现了,但是存在一个大问题:我们用Fragment的一个很大的原因,就是为了复用。这么写相当于这个Fragment已经完全和当前这个宿主Activity绑定了,复用直接废了~~~所以呢?我们换种方式,推荐使用arguments来创建Fragment。public class ContentFragment extends Fragment { private String mArgument; public static final String ARGUMENT = "argument"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // mArgument = getActivity().getIntent().getStringExtra(ARGUMENT); Bundle bundle = getArguments(); if (bundle != null) mArgument = bundle.getString(ARGUMENT); } /** * 传入需要的参数,设置给arguments * @param argument * @return */ public static ContentFragment newInstance(String argument) { Bundle bundle = new Bundle(); bundle.putString(ARGUMENT, argument); ContentFragment contentFragment = new ContentFragment(); contentFragment.setArguments(bundle); return contentFragment; } 给Fragment添加newInstance方法,将需要的参数传入,设置到bundle中,然后setArguments(bundle),最后在onCreate中进行获取;这样就完成了Fragment和Activity间的解耦。当然了这里需要注意:setArguments方法必须在fragment创建以后,添加给Activity前完成。千万不要,首先调用了add,然后设置arguments。 法二:给Fragment定义一个方法,比如setValue(Object xxx),在Activity中直接用fragment.setValue(obj)来传值。 例:首先在activity里拿到这个fragment,然后调用fragment的方法,在方法里进行界面更新操作。 Activity中:menua=(MenuFragment)getSupportFragmentManager().findFragmentById(R.id.menu_fragment);menua.updataUI(joinclub.getName()); Fragment中:public void updataUI(String clubname){clubName.setText(clubname); }法三:接口回调方式。(1)在Fragment中定义一个接口public interface onTestListener { public void onTest(String str); }(2)在Activity中实现这个接口,并实现接口中的方法@Override public void onTest(String str) { text.setText(str);//可随意 }(3)在Fragment中实现OnAttach方法@Override public void onAttach(Activity activity) { super.onAttach(activity); try { mCallback = (onTestListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() +" must implement OnHeadlineSelectedListener"); } }(4)声明接口变量,就可以调用接口中的方法mCallback.onTest(edit.getText().toString());实现效果:从Activity传递数据到两个Fragment中,Fragment获取数据后,展示出来。
0 0
- acvitity向Fragment传值跳转问题
- Fragment与Acvitity的对向传值问题
- Acvitity和Fragment通信数据显示不同步的问题
- Acvitity的生命周期和传值跳转(基本数据类型和实体类)
- activity向另一个activity的fragment传值的问题
- 关于Activity向Fragment传值的问题
- Android中Acvitity的(startActivityForResult)传值方式
- 测试Fragment(跳转回传onActivityResult问题)
- Fragment的传值跳转
- Fragment的跳转问题
- Fragment跳转问题
- work_weipa_activity与fragment跳转问题
- fragment的跳转及传值
- 【安卓知识点速记】fragment 向activity带参跳转
- Fragment和Activity跳转的问题
- 关于fragment多界面跳转的问题
- 关于fragment跳转activity的回传值问题
- Activity跳转到Fragment的问题
- java 字符串连接
- MySql中的delimiter
- mongod启动失败----------解决的办法
- 生活就像一盒巧克力,你永远不知道会尝到哪种滋味
- 汇编判断一元二次方程是否有根
- acvitity向Fragment传值跳转问题
- JS实现平衡二叉树
- 光照模型的计算选择
- 344. Reverse String
- 点分治 POJ 1741 Tree
- iOS学习之sqlite的创建数据库,表,插入查看数据
- HTTP代理协议 HTTP/1.1的CONNECT方法
- 1.Git对象模型
- lintcode——两两交换链表中的节点