我正在调用活动AddRecordActivity
中的活动ViewRecordsActivity
。两者都延伸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
没有被触发?
答案 0 :(得分:5)
这是因为您正在使用startActivity(intent);
重新启动它。摆脱它。仅拨打setResult(RESULT_OK, intent);
和finish();
答案 1 :(得分:0)
摆脱
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
&安培;
startActivity(intent)
后者导致活动再次实例化,因为它处于标准启动模式(如果没有使用CLEAR_TOP标志。否则意图在onNewIntent()中传递)。因此,活动的新实例永远不会知道您从此活动的另一个实例调用startActivityForResult()
。您需要做的就是通过在结束()之前调用finish()
和setResult()
来退出当前活动,以实现所需的结果。