簡體   English   中英

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);重新啟動它startActivity(intent); 擺脫它。 調用setResult(RESULT_OK, intent); finish(); 只要

擺脫

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(intent)

考慮到活動處於標准啟動模式(如果未使用CLEAR_TOP標志,則后者會導致活動再次實例化。否則,該意圖將通過onNewIntent()傳遞)。 因此,該活動的新實例永遠不會知道您從該活動的另一個實例調用了startActivityForResult() 您需要做的就是,通過在finish()之前調用finish()setResult()來退出當前活動,以獲得所需的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM