//FirstActivity.class
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivityForResult(intent, 1);//使用startActivityForResult()方法启动活动,第一个参数还是intent,第二个参数为请求码requestCode,相当于给各个活动编码
}
});
和普通的启动方式不同的即是用startActivityForResult()方法,第二个参数为请求码requestCode,相当于给各个活动编码,用于处理返回值时判断数据源,此处很好理解。
//SecondActivity.class
Button back = (Button)findViewById(R.id.button_22);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("back_message","Give FeedBack");
setResult(RESULT_OK,intent);//使用setResult()方法向上一个活动返回数据,第一个参数为处理结果,第二个参数为带有数据的Intent
finish();
}
});
此处Intent仅仅用于传递数据,最重要的是setResult()方法,第一个参数resultCode向上一个活动返回处理结果,一般为RESULT_OK或RESULT_CANCELLED,第二个参数把带有数据的Intent传递回去,此处Intent作用和Bundle差不多。
//FirstActivity.class
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
String returnData = data.getStringExtra("back_message");
Log.d("MainActivity.this", returnData);
}
break;
default:
}
}
由于SecondActivity是用startActivityForResult()方法启动的,在其被销毁后会回调上一个活动的onActivityResult()方法,在这个方法中获得返回的数据。由于在一个活动中可能会使用startActivityForResult()方法启动不同活动,因此requestCode用于辨别哪个活动返回数据;resultCode用于判断处理结果是否成功。requestCode和resultCode就相当于两层判别。