系列总览

我们已经知道启动activity的时候可以传递一些参数。那么在关闭activity时,能不能将一些数据传回上一个activity呢?

本文给出1个例子,实现关闭activity时,将一些数据传回给上一个activity。
例子中会有2个Activity来做示范,ForResultFirstActForResultSecondAct

启动新的Activity

ForResultFirstAct是第一个Activity。启动第二个activity时,要调用startActivityForResult方法。

1
2
3
private static final int REQ_CODE = 10;

startActivityForResult(new Intent(getApplicationContext(), ForResultSecondAct.class), REQ_CODE);

相当于给这次启动加上了一个标示。

装载回传数据

ForResultSecondAct是第二个activity。它可以设置返回时携带的数据。

1
2
3
4
5
Intent resultIntent = new Intent();
resultIntent.putExtra(K_TITLE, mTitleEt.getText().toString());
resultIntent.putExtra(K_SUB_TITLE, mSubTitleEt.getText().toString());
setResult(RESULT_OK, resultIntent);
finish();

RESULT_OK是Activity类的静态常量。可用于代表操作的结果。

1
2
3
4
5
6
/** Standard activity result: operation canceled. */
public static final int RESULT_CANCELED = 0;
/** Standard activity result: operation succeeded. */
public static final int RESULT_OK = -1;
/** Start of user-defined activity results. */
public static final int RESULT_FIRST_USER = 1;

获取回传数据

ForResultFirstAct中需要复写方法,获取返回的数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQ_CODE:
if (resultCode == RESULT_OK) {
if (data != null) {
mTitleTv.setText(data.getStringExtra(ForResultSecondAct.K_TITLE));
mSubTitleTv.setText(data.getStringExtra(ForResultSecondAct.K_SUB_TITLE));
}
} else {
Toast.makeText(getApplicationContext(), "未保存修改", Toast.LENGTH_SHORT).show();
}
break;
}
}

以上是activity回传数据的一个例子。
我们着重注意

  • startActivityForResult方法,启动下一个activity。
  • setResult方法,装载回传数据。
  • onActivityResult方法,获取回传结果。

工程放这里: https://github.com/AnRFDev/Tutorial2020

相关阅读
Activity 总览
Activity 传递Parcelable对象
Activity 启动模式,任务和返回栈
Activity 跳转,携带参数跳转

欢迎在下方留下你的意见和建议~