Android开发,当我开始一项新的活动时,我';我已经发布了一个,我如何才能转向我以前发布的那个呢?

Android开发,当我开始一项新的活动时,我';我已经发布了一个,我如何才能转向我以前发布的那个呢?,android,android-activity,navigation-drawer,Android,Android Activity,Navigation Drawer,这对我来说是必要的,因为我在我的应用程序中使用了导航抽屉,我不希望每次单击该项目时都为我启动一个新的活动 例如,导航抽屉中有两个项目,A和B。首先我单击A,它启动A活动。然后我点击B,它开始B活动。最后,我再次单击A,我想返回到最后一个A-activity及其状态,而不是启动新的A-activity。我怎样才能做到 非常感谢 假设您有4项类似的活动: A-->B-->C-->D 其中D是最上面的活动,A是根活动。如果您“退回”到活动B,那么您需要做两件事以避免碰到B的onCreate方法 1.)

这对我来说是必要的,因为我在我的应用程序中使用了导航抽屉,我不希望每次单击该项目时都为我启动一个新的活动

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


非常感谢

假设您有4项类似的活动:

A-->B-->C-->D

其中D是最上面的活动,A是根活动。如果您“退回”到活动B,那么您需要做两件事以避免碰到B的onCreate方法

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

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

现在,当“D”向B调用新的意图时,B将恢复,C和D将被删除。B将不会被重新创建,它将只调用onNewIntent。

假设您有4个活动,如下所示:

A-->B-->C-->D

其中D是最上面的活动,A是根活动。如果您“退回”到活动B,那么您需要做两件事以避免碰到B的onCreate方法

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

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

现在,当“D”向B调用新的意图时,B将恢复,C和D将被删除。B不会被重新创建,它只会调用onNewIntent。

您可以将活动
A
设置为一个实例,并且当您想要启动该实例时,使用
标记活动\u重新排序\u到\u前台

在舱单中:

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

您可以将活动
A
设置为单个实例,并在想要启动时使用
标记活动\u重新排序\u到\u前端
,如下所示:

在舱单中:

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

这取决于您的导航意图

启动模式不会对您有多大帮助,除非您只有一个活动要保存而不是重新创建,在这种情况下,您可以尝试使用
singleTask
Launch模式-它使用自己的backbackback创建新任务,并确保您的活动在该任务中只出现一次-我不建议这样做,除非你真的知道你在做什么和为什么。更多关于不同发射模式的深入见解。另外,不要使用
singleInstance
——它只会在根目录下创建一个带有单个活动的新任务,您仍然需要了解如何切换到正确的任务

您可以尝试在开始和开始活动时使用Intent.FLAG\u ACTIVITY\u CLEAR\u TOP,但从后台推送的其他活动仍将被重新创建,我猜这不是您的意图

我的建议是:使用一个
活动
并切换
片段
(参见第节)。强烈推荐使用导航抽屉实现屏幕切换(您将体验到更少的痛苦,并看到屏幕切换速度更快!)。您将能够保存片段实例状态,并使用保存的捆绑包设置片段(更不用说您将能够在根目录下使用单个导航抽屉,而不是每个活动使用一个)

更新:使用
标记活动,将活动重新排序到前端
可能会对您有所帮助,但需要更多的研究


干杯!

这取决于您的导航意图

启动模式不会对您有多大帮助,除非您只有一个活动要保存而不是重新创建,在这种情况下,您可以尝试使用
singleTask
Launch模式-它使用自己的backbackback创建新任务,并确保您的活动在该任务中只出现一次-我不建议您这样做,除非您真的知道是什么t以及您为什么要这样做。要更深入地了解不同的启动模式。另外,不要使用
singleInstance
-它只是在根目录下创建一个带有单个活动的新任务,您仍然需要了解如何切换到正确的任务

您可以尝试在开始和开始活动时使用Intent.FLAG\u ACTIVITY\u CLEAR\u TOP,但从后台推送的其他活动仍将被重新创建,我猜这不是您的意图

我的建议是-使用一个
活动
并切换
片段
(请参见第节)。强烈建议使用导航抽屉实现屏幕切换(您将体验到更少的痛苦,并看到屏幕切换更快!)。您将能够保存片段实例状态,并使用已保存的捆绑包设置片段(更不用说您将能够在根目录下使用单个导航抽屉,而不是每个活动使用一个导航抽屉)

更新:使用
标记活动,将活动重新排序到前端
可能会对您有所帮助,但需要更多的研究


干杯!

你的后退按钮在做什么?????我想你可以使用
fragment
而不是
activity
你的后退按钮在做什么?????我想你可以使用
fragment
而不是
activity
你不需要
singleInstance
在这里,它做什么-只创建一个带有单个activity的任务在它里面,根本没有帮助解决问题。但是!
标记活动\u重新排序\u到\u前台
-使用标记看起来是个好主意(:您不需要
singleInstance
这里,它所做的是-只创建一个包含单个活动的任务,根本无助于解决问题。但是!
FLAG\u activity\u REORDER\u TO\u FRONT
-使用该标志看起来是个好主意(:Y