0

我有一个应用程序可以启动一系列以对话框为主题的活动,我希望能够一次将它们全部弹出并返回到主要活动。我查看了现有的问题,例如:

如何清除堆栈中的当前活动?

如何杀死子活动并将活动带到堆栈顶部

Android 从活动堆栈中弹出

并在此基础上提出了这个:

Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

这在功能上有效,但我遇到的问题是,当它被执行时,以对话框为主题的活动后面的屏幕会变黑一秒钟,然后最终将对话框设置为动画。如果我使用后退按钮手动弹出这些活动,则不会发生这种情况。

在 LogCat 中,我可以看到当我使用上述Intent方法弹出对话框时,主要活动被破坏并重新创建,而当我只使用后退按钮时,onDestroyandonCreate方法不运行。有什么方法可以防止主要活动以这种方式显式重新启动?

4

2 回答 2

1

您可以添加singleTop到您的主要活动中。

在这里,阅读它。它带来了活动的现有实例,而不是创建一个新实例。

http://developer.android.com/guide/topics/manifest/activity-element.html

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_SINGLE_TOP

于 2013-04-29T14:15:00.083 回答
0

如果您在将主要活动添加到后台堆栈时使用除 null 以外的标签添加它,例如:

transaction.addToBackStack("welcome");

然后你可以像这样弹出 backstack:

FragmentManager fm = getFragmentManager();
fm.popBackStack("welcome", FragmentManager.POP_BACK_STACK_INCLUSIVE);
于 2013-04-29T13:57:37.780 回答