我创建了一个对话框作为活动,用户在其中检查三个单选按钮之一,并将结果返回到主活动。我关注了answer on this SO question
我认为通过创建此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)));
}
}
}
}
}
这是为什么?
答案 0 :(得分:2)
我的主要活动一直持续到它打开另一个我只想在从对话框获得活动结果之后才想打开的活动
这是“按预期工作”:
方法启动后,它将继续进行直到完成为止(如果方法花费的时间不长,则会导致ANR)。
执行Activity
方法的默认线程是主线程。具体来说,如果启动另一个Activity
,其方法也将在主线程上执行。
因此,只有启动新Activity
的方法完成后,才能执行新Activity
中的第一个方法。
接下来,您应该将所有等待结果的所有部分从新的Activity
移至应用程序的另一部分。您将覆盖onActivityResult()
并根据结果触发这些部分的执行。