如何只允许一个 Activity 实例,而不会弄乱返回堆栈导航?
Posted
技术标签:
【中文标题】如何只允许一个 Activity 实例,而不会弄乱返回堆栈导航?【英文标题】:How to allow only one instance of an Activity, without messing up the back stack navigation? 【发布时间】:2020-04-06 18:46:50 【问题描述】:假设我有以下活动:
一个; 乙; C 和; D;我希望 Activity C 只有一个实例。
如果用户进行以下导航:
A→C→B→D→C→B→C
我应该在我的项目中做什么,当用户开始通过其导航返回时,结果如下:
A ← B ← D ← B ← C
我尝试在应用程序的androidManifest
上的 C 活动中使用 launchMode
的所有可用标志值,但它们都没有给出预期的结果。
我的示例AndroidManifest
活动条目就这么简单:
<activity
android:name="A" />
<activity
android:name="B" />
<activity
android:name="C"
android:launchMode="singleTask" />
<activity
android:name="D" />
【问题讨论】:
您能在此处添加清单代码吗? @Sunny,我刚刚编辑了问题:) 每当你从 C 启动任何活动而不是完成 C 时。 @ShivamYadav,如果我这样做,在执行以下导航 A → C → B 并开始返回后,我将无法从 B 返回 C =/ @AugustoCarmo ,另一种解决方案是使用 startActivityForResult 并在活动 C 的 OnResult 中完成您的活动。 【参考方案1】:使用FLAG_ACTIVITY_REORDER_TO_FRONT
:
Intent intent = new Intent(this, C.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
根据文档:
如果在传递给 Context#startActivity 的 Intent 中设置,此标志将 导致启动的活动被带到其任务的前面 历史堆栈(如果它已经在运行)。
例如,考虑一个由四个活动组成的任务:A、B、C、 D. 如果 D 调用 startActivity() 的 Intent 解析为 活动B的组件,那么B将被带到前面 历史堆栈,结果顺序为:A、C、D、B。此标志将 如果还指定了 FLAG_ACTIVITY_CLEAR_TOP,则将被忽略。
【讨论】:
非常感谢您的回答,@SaurabhThorat :)。这就是全部吗? :o。我会试试看。 是的。就是这样。 解释一下这段代码的作用可能会很有用。以上是关于如何只允许一个 Activity 实例,而不会弄乱返回堆栈导航?的主要内容,如果未能解决你的问题,请参考以下文章
数组分配中的 C++ 堆内存只会弄乱第一个数组而不是第二个数组