这对我来说是必要的,因为我在我的应用程序中使用了导航抽屉,并且我不希望每次单击该项目时都会为我开始新的活动。Android开发,当我开始一个新的活动时,我已经启动了一个新的活动,我该如何转向我之前推出的活动?
例如,导航抽屉中有两个项目,A和B.首先,我单击A,然后启动A-activity。然后我点击B,它开始B活动。最后我再次点击A,我想返回到最后一个A活动及其状态,而不是开始一个新的A活动。我怎么做到的?
非常感谢!
这对我来说是必要的,因为我在我的应用程序中使用了导航抽屉,并且我不希望每次单击该项目时都会为我开始新的活动。Android开发,当我开始一个新的活动时,我已经启动了一个新的活动,我该如何转向我之前推出的活动?
例如,导航抽屉中有两个项目,A和B.首先,我单击A,然后启动A-activity。然后我点击B,它开始B活动。最后我再次点击A,我想返回到最后一个A活动及其状态,而不是开始一个新的A活动。我怎么做到的?
非常感谢!
它取决于你的导航意图。
启动模式将无法帮助你了,除非你有你想要保存,而不是重新创建只有一个活动,在这种情况下,你可以尝试使用singleTask
启动模式 - 它有它自己的堆栈中,并创建新任务确保您的活动仅在该任务中出现一次 - 我不建议这样做,除非您真的知道自己在做什么以及为什么做。 Read this了解更多有关不同启动模式的深入见解。另外,请勿使用singleInstance
- 它只是在根目录下创建一个具有单个活动的新任务,但您仍然需要了解如何切换到正确的任务。
您可能会尝试在启动和活动时使用Intent.FLAG_ACTIVITY_CLEAR_TOP,但是您从后台堆栈推出的其他活动仍将被重新创建,我想这不是您的意图。
我在提议什么 - 使用一个Activity
和开关Fragments
代替(请参阅Handle Navigation Click Event部分)。强烈推荐使用导航抽屉来实现屏幕切换的方式(并且您会感受到更少的痛苦,并且看到屏幕切换更快!)。您将能够保存片段实例状态,并使用保存的捆绑包设置片段(更不用说您可以在根目录中使用单个导航抽屉,而不是每个活动都使用一个抽屉。 FLAG_ACTIVITY_REORDER_TO_FRONT
可以帮助你,但需要更多的研究。
干杯!
是的,我使用标志FLAG_ACTIVITY_REORDER_TO_FRONT并实现了我的目标。不需要在manifest中设置singleInstance或singleTask。现在活动堆栈中只有一个A-activity,当我在其他活动中启动它,它只会放在堆栈顶部,其他活动不会被删除。但是,我认为使用Fragments确实是一种特殊的方式,因为现在我的应用程序中存在一些缺陷。我再次进行A-activity,屏幕显示有点闪烁。 – Niubility
比方说,你有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。
这不是真的正确答案的问题;另外,请至少尊重原作者:http://stackoverflow.com/a/37465579/1001883 – aleien
您可以设置活动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);
你不要在这里需要'singleInstance',它做了什么 - 只创建一个任务,只有一个活动,根本不帮助解决问题。但! 'FLAG_ACTIVITY_REORDER_TO_FRONT' - 使用该标志看起来像个好主意(: – aleien
什么是你的后退按钮做??????? –
我想你可以使用'fragment',而不是'activity' –