我创建了一个对话框作为 Activity ,用户在其中选中三个单选按钮之一,结果返回到主 Activity 。我关注了answer on this SO question
我认为通过创建这个 MainAcitvity 会暂停并等待子 Activity 的结果。
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);
}
此代码在需要时执行,我可以看到它,因为它会在我点击后退按钮时显示(我的主要 Activity 继续到它打开另一个我只想在从 Activity 中获得结果后打开的 Activity 作为对话)。
关于 Activity 结果代码...
// 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)));
}
}
}
}
}
这是为什么?
最佳答案
My main activity continues to the point where it opens another activity that I only want to open after I get the result from activity as a dialog
这是“按预期工作”:
一旦一个方法开始,它将继续直到它完成(如果它不会花费太长时间而导致 ANR)。
执行
Activity
方法的默认线程是主线程。具体来说,如果另一个Activity
启动,它的方法也会在主线程上执行。因此,新
Activity
中的第一个方法只能在启动新Activity
的方法完成后执行。因此,您应该将所有必须等待新
Activity
结果的部分移动到应用的另一部分。您覆盖onActivityResult()
并根据结果触发这些部分的执行。
关于java - StartActivityForResult 不暂停主 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54675296/