当活动由clearTop完成时,SetResult不工作

时间:2012-08-25 22:25:14

标签: android android-activity

问题概述:ActivityA使用startActivityForResult启动ActivityB。 ActivityB使用setResult设置其结果,然后使用startActivity启动ActivityC。然后,ActivityC启动singleTop ActivityA并设置CLEAR_TOP标志。我希望这可以完成ActivityB并调用ActivityA的onActivityResult方法。不幸的是,在重新启动ActivityA时不会调用此方法。


ActivityA代码:我已使用{A}的startActivityForResult()启动了一项活动(ActivityB),其中包含ActivityA的以下代码:

....
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);
}

我希望调用ActivityA中的doSomethingSpecial()函数,但这不会发生。

NB :除此之外,如果更换ActivityB代码,而不是从对话框中启动ActivityC,则调用finish()。 ActivityC永远不会打开,B只是关闭,然后确实调用了doSomethingSpecial()。因此,这个问题似乎源于对后栈和顶部功能缺乏了解。

任何帮助都将被理解为什么这不符合要求!我已经提出了很多关于此问题的讨论,但我最感兴趣的是为什么会这样,以便提高我对活动堆栈的理解。

1 个答案:

答案 0 :(得分:2)

我认为从用户的角度来看,你会从以后的活动(C)“开始”前一个活动(A),而不仅仅是“回到”它,这将感到非常奇怪。

我相信你应该用startActivityWithResult()从B开始C.然后,当活动C完成时,请致电finish()。在B onActivityResult()致电setResult()然后finish()