从全局Activity调用堆栈底部的Activity

时间:2011-03-23 00:21:52

标签: android android-activity android-intent

我已经知道我可以通过setResult将Bundled数据从一个Activity传递回另一个Activity。但是,假设我有一个可以从我的应用程序中的任何位置启动的全局Activity,因为它映射到几乎所有活动中出现在标题栏中的按钮。

长话短说,在完成用户驱动的过程之后,我希望它回信到后台堆栈中的第一个活动,基本上是我的Home活动,以便相应地更新UI。

部分问题在于,如果我使用BroadcastReceiver,当我的活动在后台时它会被取消注册,并且它不会获得刷新其数据集的信号。

我想要实现的目标如下:

从Home(ActivityA)或可以打开我的全局活动(ActivityX)的任何其他活动(活动B,C等等),它应该找到一种方法来回调ActivityA而不将其带到前面。

我应该使用FLAG_ACTIVITY_FORWARD_RESULT吗?如果是这样,我应该如何在Home之后的后续活动中对其进行建模。换句话说,如果我从Home启动子活动,我是否应该使用startActivityForResult使用我定义的任何请求代码启动它,然后在打开我的全局活动时传递FLAG_ACTIVITY_FORWARD_RESULT以便从那里设置结果?

另外,假设我从Home启动了一个带有结果的子活动,然后从我的子活动中添加更多内容到堆栈,我从中打开ActivityX。只要我从Home打开第一个孩子,系统是否仍会记住结果链?

编辑:我不打算在ActivityX中完成整个过程后立即将整个堆栈清理回家;只是一种在用户最终返回主屏幕时发出Home活动信号以刷新UI的方法。我想可能设置一个SharedPreference标志,当用户重新关注该Activity时,Home会检查onStart,这反过来又让我有条件去做最终结果,然后重置标志。

1 个答案:

答案 0 :(得分:1)

你的主屏应该只是在onResume中更新它的UI,这样一旦用户返回它就会显示最新的数据。没有必要传递回调。否则,您可以在家庭活动中注册onCreate中的广播接收器(并在onDestroy中取消注册...不理想),然后在您希望更新家庭活动时发送广播(尽管家庭活动不应该实际上更新自己直到它恢复。)

以下是如何回到您的家庭活动:

Intent goHome = new Intent(getContext(), HomeActivity.class);
goHome.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
goHome.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(goHome);

FLAG_ACTIVITY_CLEAR_TOP:这可确保在启动活动时,它会显示其初始活动。

FLAG_ACTIVITY_NEW_TASK:我们正在开始一项新任务(即后退按钮不应该返回到上一个屏幕,以便在主屏幕上按回会退出您的应用)。

明天我会更新其余部分。