![](/img/trans.png)
[英]startActivityForResult sometimes cause main Activity finish and removed from the activities stack
[英]StartActivityForResult not pausing Main Activity
我已經創建了一個對話框作為活動,用戶在其中檢查三個單選按鈕之一,並將結果返回到主活動。 我按照這個問題的答案
我認為通過創建此MainAcitvity將暫停並等待子活動的結果。
private void getFinalFinish() {
Intent intent_openDialog = new Intent(this, DaAAmountToFinish.class);
// Start the SecondActivity
Bundle bundle_PassToDialog = new Bundle();
bundle_PassToDialog.putInt("EXTRA_SCORE_TO_SUBTRACT", scoreToSubtractFrom);
bundle_PassToDialog.putString("EXTRA_RADIO_BUTTON", rb_selected.getText().toString());
bundle_PassToDialog.putString("EXTRA_THROWING", whosThrowing);
intent_openDialog.putExtras(bundle_PassToDialog);
startActivityForResult(intent_openDialog, DIALOG_REQUEST_CODE);
}
此代碼在需要時執行,每當我按下“后退”按鈕時,我就會看到它顯示的內容(我的主要活動繼續到打開另一個活動的地步,在我從對話框中獲得活動結果后,我只想打開該活動)。
活動結果代碼...
// This method is called when the dialog activity finishes
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Check that it is the SecondActivity with an OK result
if (requestCode == DIALOG_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
// Get String data from Intent
int darts_to_minus = extras.getInt("DARTS_TO_MINUS");
boolean addTooScore = extras.getBoolean("ADD_TO_SCORE");
int dartsToSubtractFromFinish = extras.getInt("DARTS_TO_SUBTRACT_FROM_FINISH");
setMatchAVG(darts_to_minus, whosThrowing, addTooScore);
if (newBestLeg) {
if (whosThrowing.equalsIgnoreCase("Player 1")) {
tv_bestLeg.setText(getString(R.string.tv_BestLeg, String.valueOf(tempNumOfDartsThrownP1 + dartsToSubtractFromFinish))); //Subtract 2 off best leg only took 1 dart to finish
} else {
tv_bestLegP2.setText(getString(R.string.tv_BestLeg, String.valueOf(tempNumOfDartsThrownP2 + dartsToSubtractFromFinish)));
}
}
}
}
}
為什么是這樣?
我的主要活動繼續到打開另一個活動的地步,我只想在從對話框中獲得活動結果后才打開
這是“按預期工作”:
一旦方法開始,它將繼續進行直到完成為止(如果方法用時不長,因此會導致ANR)。
執行Activity
方法的默認線程是主線程。 具體來說,如果啟動另一個Activity
,則其方法也將在主線程上執行。
因此,只有在啟動新Activity
的方法完成后才能執行新Activity
的第一個方法。
接下來,您應該將所有需要等待結果的所有部分從新Activity
移到應用程序的另一部分。 您重寫onActivityResult()
並根據結果觸發這些部分的執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.