2016-10-03 161 views
0

这对我来说是必要的,因为我在我的应用程序中使用了导航抽屉,并且我不希望每次单击该项目时都会为我开始新的活动。Android开发,当我开始一个新的活动时,我已经启动了一个新的活动,我该如何转向我之前推出的活动?

例如,导航抽屉中有两个项目,A和B.首先,我单击A,然后启动A-activity。然后我点击B,它开始B活动。最后我再次点击A,我想返回到最后一个A活动及其状态,而不是开始一个新的A活动。我怎么做到的?

非常感谢!

+0

什么是你的后退按钮做??????? –

+0

我想你可以使用'fragment',而不是'activity' –

回答

1

它取决于你的导航意图。

启动模式将无法帮助你了,除非你有你想要保存,而不是重新创建只有一个活动,在这种情况下,你可以尝试使用singleTask启动模式 - 它有它自己的堆栈中,并创建新任务确保您的活动仅在该任务中出现一次 - 我不建议这样做,除非您真的知道自己在做什么以及为什么做。 Read this了解更多有关不同启动模式的深入见解。另外,请勿使用singleInstance - 它只是在根目录下创建一个具有单个活动的新任务,但您仍然需要了解如何切换到正确的任务。

您可能会尝试在启动和活动时使用Intent.FLAG_ACTIVITY_CLEAR_TOP,但是您从后台堆栈推出的其他活动仍将被重新创建,我想这不是您的意图。

我在提议什么 - 使用一个Activity和开关Fragments代替(请参阅Handle Navigation Click Event部分)。强烈推荐使用导航抽屉来实现屏幕切换的方式(并且您会感受到更少的痛苦,并且看到屏幕切换更快!)。您将能够保存片段实例状态,并使用保存的捆绑包设置片段(更不用说您可以在根目录中使用单个导航抽屉,而不是每个活动都使用一个抽屉。 FLAG_ACTIVITY_REORDER_TO_FRONT可以帮助你,但需要更多的研究。

干杯!

+0

是的,我使用标志FLAG_ACTIVITY_REORDER_TO_FRONT并实现了我的目标。不需要在manifest中设置singleInstance或singleTask。现在活动堆栈中只有一个A-activity,当我在其他活动中启动它,它只会放在堆栈顶部,其他活动不会被删除。但是,我认为使用Fragments确实是一种特殊的方式,因为现在我的应用程序中存在一些缺陷。我再次进行A-activity,屏幕显示有点闪烁。 – Niubility

2

比方说,你有4个activites像这样:

甲 - >乙 - “ç - > d

,其中d是最高活性,A是根系活力。如果你正在'回退'到活动B,那么你需要做两件事来避免碰到B的onCreate方法。

1.)使B成为“SingleTask”活动。您可以在Android Manifest中执行此操作。简而言之,这意味着只有一个B的“实例”将永远存在于这个任务中。如果B在它被调用时已经在运行,那么它将被简单地置于前面。这是你如何做到的。

<activity 
    android:name=".ui.MyActivity" 
    android:launchMode="singleTask"/> 

但是你不想把B带到前面。你想“回落”到B让你的筹码看起来像

甲 - >乙

2)这个标志添加到您的意图是“开始” B.这确保了C和d是除去。

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

现在,当'D'将新的Intent调用到B时,B将被恢复并且C和D将被移除。 B将不会被重新创建,它只会调用onNewIntent。

+0

这不是真的正确答案的问题;另外,请至少尊重原作者:http://stackoverflow.com/a/37465579/1001883 – aleien

1

您可以设置活动A作为一个实例,当你希望启动使用FLAG_ACTIVITY_REORDER_TO_FRONT这样的:

清单中

<activity 
     android:launchMode="singleInstance" 
     android:name="com.test.activity_a" 
     android:label="Activity A" /> 

代码:

Intent intent = new Intent(context, cls_a); 
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
+0

你不要在这里需要'singleInstance',它做了什么 - 只创建一个任务,只有一个活动,根本不帮助解决问题。但! 'FLAG_ACTIVITY_REORDER_TO_FRONT' - 使用该标志看起来像个好主意(: – aleien

相关问题