android - onActivityResult未调用

时间:2015-10-22 07:25:05

标签: android android-intent onactivityresult

我正在调用活动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没有被触发?

2 个答案:

答案 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()来退出当前活动,以实现所需的结果。