android 使用intent返回数据给上一个activity
1、首先,创建一个android工程IntentTest,然后给这个主activity增加一个按钮,这个按钮用来启动另一个activity

2、然后创建一个新的activity,activity2,用来接收上一个activity传递过来的数据

3、处理第一个activity中的按钮。
增加了如下代码:
Button b = (Button)findViewById(R.id.button);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(MainActivity.this, activity2.class);
startActivityForResult(intent, 100);
}
});
可以看到,这里使用了startActivityForResult()方法。这个方法的意思是,期待从下一个activity中获取数据。那么,这个100是什么意思呢?这个是唯一标识码,代表着第二个activity。比如,当前有多个activity会返回数据给第一个activity,那么第一个activity如何知道他获取到的数据是哪一个activity给他的呢?就是通过这个标识码进行判断的。

4、然后,我们处理第二个activity的代码。现在,我们给这个activity也增加一个按钮,当点击按钮的时候,会退出当前界面,并返回数据给上一个activity.
首先,在layout增加一个按钮。
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="返回数据给第一个activity"
/>

5、然后,在actiivty2.java中,增加对这个按钮的处理
Button b = (Button)findViewById(R.id.button2);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.putExtra("data_return", "Hello");
setResult(RESULT_OK, intent);
finish();
}
});
可以看到,这里创建了一个新的intent,因为这个intent不需要任何意图,所以参数为空,这个intent就是要返回给上一个activity的intent.同样的用法,使用了intent.putExtra()增加了一些额外数据,然后通过setResult将数据传递给上一个数据,第一个参数一般是RESULT、RESULT_CANCELED

6、当然,并不是调用了setResult(RESULT_OK, intent);之后,第一个activity立刻能收到数据。而是我们调用了finish()方法销毁当前活动后,会调用第一个activity的onActivityResult()方法,这个方法在哪里呢?我们需要重写
7、回到第一个activity,我们重写onActivityResult()。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 100:
if (resultCode == RESULT_OK) {
String returnedData = data.getStringExtra("data_return");
Toast.makeText(MainActivity.this,returnedData , Toast.LENGTH_LONG).show();
}
break;
default:
}
}
代码所示,首先判断标识符,确定是100则知道了是哪一个activity传递给我们的,然后判断是RESULT_OK还是RESULT_CANCELED,并对数据进行处理,通过toast显示出来

8、最后的效果图如下
