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 以获得所需的结果。