android - 未调用 onActivityResult
android - onActivityResult not called
我正在从 Activity ViewRecordsActivity
呼叫 Activity AddRecordActivity
。两者都扩展 AppCompatActivity
.
我称AddRecordActivity
为,
startActivityForResult(intent, Constants.MY_REQUEST_CODE);
在AddRecordActivity
中添加记录后调用如下代码:
Intent intent = new Intent(AddRecordActivity.this, ViewRecordsActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra(Constants.EXTRA_OPERATION_SUCCESS_TEXT, "Record added");
setResult(RESULT_OK, intent);
startActivity(intent);
finish();
并且在ViewRecordsActivity
,
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case Constants.MY_REQUEST_CODE: {
Toast.makeText(this, data.getStringExtra(Constants.EXTRA_OPERATION_SUCCESS_TEXT), Toast.LENGTH_SHORT).show();
}
break;
}
}
}
我不明白为什么事件 onActivityResult
没有被触发?
这是因为您正在使用 startActivity(intent);
重新启动它。摆脱它。仅调用 setResult(RESULT_OK, intent);
和 finish();
去掉
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
&
startActivity(intent)
考虑到 activity 处于标准启动模式(如果未使用 CLEAR_TOP 标志,后者会导致 activity 再次实例化。否则将在 onNewIntent() 中传递意图)。因此,activity 的新实例永远不会知道您从这个 activity 的另一个实例调用了 startActivityForResult()
。您需要做的就是,通过在 finish() 之前调用 finish()
和 setResult()
来退出当前的 activity 以获得所需的结果。
我正在从 Activity ViewRecordsActivity
呼叫 Activity AddRecordActivity
。两者都扩展 AppCompatActivity
.
我称AddRecordActivity
为,
startActivityForResult(intent, Constants.MY_REQUEST_CODE);
在AddRecordActivity
中添加记录后调用如下代码:
Intent intent = new Intent(AddRecordActivity.this, ViewRecordsActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra(Constants.EXTRA_OPERATION_SUCCESS_TEXT, "Record added");
setResult(RESULT_OK, intent);
startActivity(intent);
finish();
并且在ViewRecordsActivity
,
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case Constants.MY_REQUEST_CODE: {
Toast.makeText(this, data.getStringExtra(Constants.EXTRA_OPERATION_SUCCESS_TEXT), Toast.LENGTH_SHORT).show();
}
break;
}
}
}
我不明白为什么事件 onActivityResult
没有被触发?
这是因为您正在使用 startActivity(intent);
重新启动它。摆脱它。仅调用 setResult(RESULT_OK, intent);
和 finish();
去掉
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
&
startActivity(intent)
考虑到 activity 处于标准启动模式(如果未使用 CLEAR_TOP 标志,后者会导致 activity 再次实例化。否则将在 onNewIntent() 中传递意图)。因此,activity 的新实例永远不会知道您从这个 activity 的另一个实例调用了 startActivityForResult()
。您需要做的就是,通过在 finish() 之前调用 finish()
和 setResult()
来退出当前的 activity 以获得所需的结果。