使用场景
跳转页面返回后,Main页面可直接获取跳转页面的数据,无需再次请求服务器。
结果如下图:
使用方式
- 1 在MainActivity中给不同Activity定义请求码
private static final int REQUEST_FIRST = 0;
private static final int REQUEST_SECOND = 1;
- 2 调用startActivityForResult方法
startActivityForResult(new Intent(this, FirstActivity.class), REQUEST_FIRST);
- 3 在MainActivity中重写onActivityResult方法
/**
* 仅当使用startActivityForResult方法启动时,
* 请求的Activity完成任务被finish()之后回调此方法
* requestCode: 请求代码,就是startActivityForResult()里面的请求代码。
* resultCode: 返回代码,就是setResult()方法里面的设置的参数。
* Intent: setResult(int, Intent)里面的放置数据的Intent。
* */
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQUEST_FIRST:
Toast.makeText(this, "Come from FirstActivity", Toast.LENGTH_LONG).show();
switch (requestCode) {
case FirstActivity.RESULT_SUCCESS:
Toast.makeText(this, data.getStringExtra("name"), Toast.LENGTH_LONG).show();
break;
case FirstActivity.RESULT_FAILED:
break;
}
break;
case REQUEST_SECOND:
Toast.makeText(this, "Come from SecondActivity", Toast.LENGTH_LONG).show();
break;
}
}
- 4 在跳转的Activity中调用setResult方法
public static final int RESULT_SUCCESS = 0;
public static final int RESULT_FAILED = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
//具体的操作。。。
boolean result = true;
Intent intent = getIntent();
intent.putExtra("name", "TF");
if (result) {
setResult(RESULT_SUCCESS, intent);
} else {
setResult(RESULT_FAILED);
}
//结束,返回到MainActivity,回调onActivityResult
finish();
}
注意
在setResult后,要调用finish()销毁当前的Activity,否则无法返回到原来的Activity,就无法执行原来Activity的onActivityResult函数。