问题概述:ActivityA 以 ActivityB 启动startActivityForResult
。ActivityB 使用 设置其结果setResult
,然后使用 启动 ActivityC startActivity
。ActivityC 然后启动singleTop
ActivityA 并设置CLEAR_TOP
标志。我希望这可以完成 ActivityB 并调用 ActivityA 的onActivityResult
方法。不幸的是,在重新启动 ActivityA 时不会调用此方法。
ActivityA 代码:我使用startActivityForResult()
来自 ActivityA 的以下代码启动了一个活动 (ActivityB):
....
final Intent intent = new Intent(this, ActivityB.class);
startActivityForResult(intent, 0);
....
ActivityA 中的以下代码等待结果:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == ACTIVITY_RESULT){
doSomethingSpecial();
}
}
ActivityB 代码:我有一个确认对话框。当用户单击“是”时,他们将设置此活动的结果,即
private void showConfirmationDialog(String message, final String username) {
AlertDialog.Builder alert = new AlertDialog.Builder(this)
.setMessage(message)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent intent = new Intent(this, ActivityC.class);
setResult(ActivityA.ACTIVITY_RESULT);
startActivity(intent);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
alert.show();
}
ActivityC 代码:准备就绪后,在 ActivityC 中单击按钮时会调用以下代码:
private void startActivityA(){
Intent intent = new Intent(this, ActivityA.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
我期望doSomethingSpecial()
调用 ActivityA 中的函数,但这没有发生。
注意:顺便说一句,如果替换了 ActivityB 代码,而不是从对话框中启动 ActivityC,而是调用了 finish()——即 ActivityC 永远不会打开而 B 只是简单地关闭,那么doSomethingSpecial()
确实会被调用。所以这个问题似乎源于对back stack和clear top的功能缺乏了解。
任何帮助将不胜感激,为什么这不符合预期!我对此提出了一些技巧,但我最感兴趣的是为什么会发生这种情况,以提高我对活动堆栈的理解。