因为项目的需求,自己总结了Activity和Activity、Fragment之间传递数据的几种方式,和大家分享一下(仅供参考)
一.Intent
1.普通的传递数据
相信做过android的都使用过Intent,页面之间传递数据最基础的一种方式(Fragment给Activity传递数据相同)
A为 发送数据的页面,B为接收数据的页面
Intent intent = new Intent(A.this,B.class); intent.putExtra("data",data); startActivity(intent);
2回传数据
A为发送数据的页面(接收B的回传)
A页面
B页面Intent intent = new Intent(A.this, B.class); startActivityForResult(intent, 0);//注意 必须重写onActivityResult
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (resultCode) { //resultCode为回传的标记,我在B中回传的是RESULT_OK case RESULT_OK: String bankName=data.getStringExtra("data");(回传的数据) break; default: break; } }
Intent intent1 = new Intent(B.this, A.class); intent1.putExtra("data",data); setResult(RESULT_OK, intent1); //intent为A传来的带有Bundle的intent,当然也可以自己定义新的Bundle finish();//此处一定要调用finish()方法
3.Activity给Fragment传递数据
1。要传的值 放到Bundle对象里 2。通过创建传递封Fragment 将bundle对象 通过 setArguments()传递到fragment 3.Fragment中 通过getArguments() 得到 bundle对象 就能得到里面的值Activity
Fragment1 fragment1 = new Fragment1(); Bundle bundle = new Bundle(); String strValue = et1.getText().toString().trim(); bundle.putString("str", strValue); fragment1.setArguments(bundle); //如果transaction commit()过 那么我们要重新得到transaction transaction = manager.beginTransaction(); transaction.replace(R.id.contents, fragment1); transaction.commit();
Fragment
Bundle bundle = getArguments();//从activity传过来的Bundle
二EventBus
EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。 1、下载EventBus的类库源码: https://github.com/greenrobot/EventBus
使用方法:
(1),创建一个实体类 Test.class
(2),接收消息的页面
在Oncreate里面
eventBus.register(this);
这里注意要在onDestory里面
eventBus.unregister(this);
(3)接受消息的页面实现(共有四个函数,各功能不同,这是其中之一):
public void onEvent(Test test) {}
(4)发送消息eventBus.post(new Test());