android - 当 Activity 由 clearTop 完成时 SetResult 不起作用

标签 android android-activity

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


ActivityA 代码:我已使用 startActivityForResult() 启动了一个 Activity (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 代码:我有一个确认对话框。当用户单击"is"时,他们将设置此 Activity 的结果,

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() 函数,但这并没有发生。

注意:顺便说一句,如果 ActivityB 代码被替换,并且不是从对话框启动 ActivityC,而是调用 finish(),即ActivityC 从未打开,B 只是关闭,然后 doSomethingSpecial() 确实被调用。因此,这个问题似乎源于对返回堆栈和清除顶部的功能缺乏了解。

任何关于为什么这没有按预期表现的帮助将不胜感激!我对此提出了许多技巧,但我最感兴趣的是为什么会发生这种情况,以提高我对 Activity 堆栈的理解。

最佳答案

我认为,从用户的角度来看,您从后面的 Activity (C)“开始”先前的 Activity (A),而不是仅仅“返回”它,会感觉很奇怪。

我相信您应该使用 startActivityWithResult() 从 B 开始 C。然后,当 Activity C 完成时,调用 finish()。在 B 的 onActivityResult() 中调用 setResult(),然后调用 finish()

关于android - 当 Activity 由 clearTop 完成时 SetResult 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12126125/

相关文章:

android - 无法找到 support-media-compat.aar

android - Android 中从左到右的无缝 Activity 过渡动画

mysql - 捕获用户 Activity 日志的好工具

android - 无法从 Android 中的 SharedPreferences 访问字符串

java - 在键盘android上添加 View

java - 这个 Android 代码 fragment 在做什么?

尽管 URL 工作正常,但对 webservice 的 Android 调用没有返回任何结果

android - RxJava 的 retryWhen 运算符

android - 将服务绑定(bind)到 Activity 或 fragment ?

java - 无法在我的应用程序中使用全局变量