将已经停止的现有活动放在首位

时间:2018-08-25 14:19:29

标签: android android-intent android-activity android-navigation

我有活动显示特定城市的数据,当用户在各城市之间导航时,我想将该城市已经打开的活动(如果不创建新活动)放在最前面。

例如:

  • (X城市信息)用户打开的活动类别名称CityActivity。
  • 然后在(X城市)里面,他为(Y城市信息)打开了另一个CityActivity。
  • 然后在(Y城市)里面,他为(Z城市信息)打开了另一个CityActivity。

如果他单击按钮以打开(X城市信息),现在在(Z城市)CityActivity内部,我需要检查X城市是否还有另一个CityActivity,并将其放在最前面,否则创建它。

我想要一种解决方案,不要用片段或其他任何东西更改它。

如果Android不支持这样做的方法,那么如何将“活动”从其引用转移到前景,如:

mCityActivity.foreground();

context.toForeground(mCityActivity);

2 个答案:

答案 0 :(得分:0)

您可以使用以下标志:FLAG_ACTIVITY_REORDER_TO_FRONT

Intent intent = new Intent(currentActivity.this,
       anotherActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

答案 1 :(得分:0)

您不能那样做。如前所述,如果您的任务中有多个Activity实例,则Android无法找到Activity的特定实例。无论如何,您的架构都是有缺陷的,因为它无法扩展,并且您已经看到自己无法做自己想做的事。

执行此操作的正确方法是根本不创建Activity的多个实例。当用户希望从X City到Y City时,只需将Activity的现有实例中的数据从显示X更改为显示Y。使用内部堆栈记住导航并推送表示“ X”放到堆栈上。现在,当用户从Y City移到Z City时,将表示“ Y”的对象推到堆栈上,并将Z City的数据加载到视图中。当用户按下“返回”按钮时。您只需从堆栈中弹出顶部对象,然后使用该对象将先前城市的数据再次加载到视图中即可。当用户按下BACK并且堆栈为空时,您只需在finish()上调用Activity

此体系结构是完全可伸缩的。用户可以遍历任意城市,甚至可以在两个城市之间来回多次。您将永远不会有内存泄漏或堆栈溢出的情况,因为您只有Activity的一个实例。