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

Activity之间的数据传递_Intent和startActivityForResult的使用
本节主要讨论下Activity之间(A和B)的数据该如何传递。
1、A->B:A跳转到B的同时,将一些数据传递给B
代码实现:很简单,只需在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);

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


2、B得到数据后,还想返回A(或者将数据处理一下再返回给A),假设此时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的方式,我们为什么不用呢?