0

我有一个短信应用程序,它有两个主要活动:

  • TextChatActivity- 一个对话。可以有多个对话的多个实例。
  • ConvListActivity- 所有活动的列表。

此外,TextChatActivity可以通过状态栏通知打开某个对话。

我想要做的是把一个特定的TextChatActivity实例带到前面。

  • 假设我有 2 个开放式对话 ( TextChatActivity) A 和 B,而 B 在前面。
  • 现在我收到了一条导致对话 A 的通知。我希望它把对话 ATextChatActivity带到前面。

如果不打开TextChatActivity对话 A 的新实例,我该如何做到这一点?

谢谢!

4

2 回答 2

1

事实上,你不能。如果您在堆栈中有多个活动实例,则无法处理一个活动的唯一实例,以便您可以将其置于最前面。

你的架构不好。由于 Android 的工作方式,如果你有这个活动的单个实例,你会更好,并允许用户在对话之间切换,而不是通过创建一个新的活动实例,而只是通过切换底层数据现有的活动。通过这种方式,您只有一个活动实例,您可以简单地更改您正在显示的数据。

在您的“通知”示例中,您从通知开始的 Intent 应该有一个“额外”,指示用户想要显示哪个对话。您应该通过在启动时TextChatActivity声明launchMode="singleTop"或设置来确保只有一个您的实例。FLAG_ACTIVITY_SINGLE_TOPonNewIntent()您的活动中调用时,检查“附加”并调整内容以显示所需的对话。

如果你想为每个对话创建一个活动的“幻觉”,那么你可以覆盖`onBackPressed()并在活动中管理你自己的对话“堆栈”,这样当用户按下返回键时,你可以返回在对话的“堆栈”中并向他显示上一个对话,只需修改显示的数据即可。

于 2013-06-10T10:59:53.763 回答
0

只需启动一个活动并设置标志 FLAG_ACTIVITY_CLEAR_TOP

于 2013-06-09T09:51:18.223 回答