Activity和Activity、Fragment之间传递数据的方式

因为项目的需求,自己总结了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页面

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;
    }
}
B页面

Intent intent1 = new Intent(B.this, A.class);
intent1.putExtra("data",data);
setResult(RESULT_OK, intent1); //intentA传来的带有Bundleintent,当然也可以自己定义新的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,BroadCastFragmentActivityService,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。
        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());



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值