Activity之间的数据传递_Intent和startActivityForResult的使用

本节主要讨论下Activity之间(A和B)的数据该如何传递。
1、[color=red]A->B:A跳转到B的同时,将一些数据传递给B[/color]
代码实现:很简单,只需在A中生成Intent的时候,将需要传递的数据放到Intent中,如下:(1)A
    Intent intent = new Intent();
intent.setClass(A.this, B.class);
Bundle bundle = new Bundle();
bundle.putString("story", "Tom&jerry");
intent.putExtra("tag", bundle);
startActivity(intent);

[color=red]这里由于只是想传递个“Tom&jerry”给B,所以只需要使用intent.putExtras(String,String)即可,本例中使用bundle封装一次主要是考虑到如果有略微复杂的数据可以使用bundle的方式[/color]
(2)B
在B中接受A传递过来的数据,只需在B的oncreate()中如下处理:
   Intent intent = getIntent();
Bundle bundle = intent.getBundleExtra("tag");
String storyName = bundle.getString("story");


2、[color=red]B得到数据后,还想返回A(或者将数据处理一下再返回给A),[/color]假设此时A已经finish了,我们想把数据带回A去
我们是不是还得像1一样重新将数据封装一次呢,如果这个数据数据的封装过程是很麻烦的,岂不是很糟糕?答案是否定的。我们可以在A中使用startActivityForResult(intent,0)来启动B,0为下一个activity要返回的依据,并重写onActivityResult方法,如下:
(1)在A中,跳转到B时不使用startActivity(intent)而是使用:
startActivityForResult(intent, 0);

(2)在A中,重写onActivityResult方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
switch (resultCode) {
case RESULT_OK:
Bundle bundle = data.getBundleExtra("tag");
String storyName = bundle.getString("story");
tv1.setText(storyName);
break;
default:
break;
}
}

(3)在B中,使用一个“返回B”的按钮,在其onclick中只需一句
B.this.setResult(RESULT_OK,intent);
即可实现返回A界面,并把数据传回给A,intent中的数据可以为A最开始传过来的数据,也可以是经过B处理过的数据。

其实,在B中直接使用startActivity(B.this,A.class),并在A的oncreate中判断Intent中有没有数据,有的话就带入数据,没有就传入null值,这样的方式也是可以实现,不过略显麻烦,既然系统提供给我们了这种startActivityForResult的方式,我们为什么不用呢?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值