1、在一个Activity中想要启动进入另一个Activity时,通常我们使用startActivity这个方法来实现,代码如下:

其中MainActivity为源activity,ActivityLifeCycleActivity为目标activity,也就是要进入的那个,也可通过intent传递一些必要的参数。

Intent intent = new Intent(MainActivity.this, ActivityLifeCycleActivity.class);
startActivity(intent);

2、当进入第二个activity后,想要在关闭activity时传递一些参数给它的上一级activity,即可使用startActivityForResult这个方法来实现,代码如下:

方法中的intent和startActivity的intent没有区别,需要传递一个requestCode, 即1这个值为本次请求的标识,在第二个activity返回后用的到

Intent intent = new Intent(MainActivity.this, ActivityForResultActivity.class);
startActivityForResult(intent, 1);

在ActivityForResultActivity中返回数据,通过setResult方法实现,第一个参数为resultCode,告诉第一个activity返回的标识是RESULT_OK, 第二个参数通过intent传递数据;调用finish关闭当前activity,返回数据,即执行ActivityForResultActivity.this.finish() 完成activity的关闭

public class ActivityForResultActivity extends ActionBarActivity {
private Button mBtnReturnMain;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activity_for_result);

mBtnReturnMain = (Button) findViewById(R.id.btn_return_main);
mBtnReturnMain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { Intent intent = new Intent();
intent.putExtra("result", "我是来自ForResult的Activity的消息"); setResult(RESULT_OK, intent);
ActivityForResultActivity.this.finish();
}
});
}
}

在源activity也就是MainActivity中实现方法onActivityResult,判断resultCode的值和上面setResult的第一个参数进行对应,分支requestCode与startActivityForResult的第二个参数对应,这样可以通过参数值在做多个分支的跳转与数据接收

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){ switch (requestCode){
case 1:
String str = data.getStringExtra("result");
if(TextUtils.isEmpty(str)){
str = "ForResultActivity没有返回消息";
} Toast.makeText(MainActivity.this,str, Toast.LENGTH_SHORT).show(); break; default:
break;
} }
}

以上就是对startActivity和startActivityForResult的一点总结

05-04 10:49