我有活动显示特定城市的数据,当用户在各城市之间导航时,我想将该城市已经打开的活动(如果不创建新活动)放在最前面。
例如:
如果他单击按钮以打开(X城市信息),现在在(Z城市)CityActivity内部,我需要检查X城市是否还有另一个CityActivity,并将其放在最前面,否则创建它。
我想要一种解决方案,不要用片段或其他任何东西更改它。
如果Android不支持这样做的方法,那么如何将“活动”从其引用转移到前景,如:
mCityActivity.foreground();
或
context.toForeground(mCityActivity);
答案 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
的一个实例。