3

想象两个活动 A 和 B。

  1. A 启动一个活动 B(将在 backstack 的顶部)
  2. 创建一个待处理的意图并将其附加到允许返回到新活动 B 的通知。设置标志 FLAG_ACTIVITY_REORDER_TO_FRONT 是为了只有一个活动 B(我们在步骤 1 中创建的那个)

  3. 我退出应用程序,打开通知栏,然后单击通知。我希望我回到第 1 步中创建的活动 B。嗯.. 它创建了一个新的活动 B,将其放在后台堆栈的顶部。什么!?我不明白这种行为!

现在有关此的更多细节可能很重要(我是否检测到错误气味?):

  • 步骤 1 和 2 在活动 A 具有的 Fragment 中执行。

  • 我使用支持 v4 库,活动是 SherlockFragmentActivity 的扩展实现 ActionBar.TabListener

这是代码片段:

//Activity B creates and showed
Intent i = new Intent(getActivity(), B.class);
getActivity().startActivity(i);

Intent notificationIntent = new Intent(getActivity(), Prova2.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
notificationIntent.putExtra("test", "hi I'm a test");

PendingIntent contentIntent = PendingIntent.getActivity(getActivity(), 0, notificationIntent, 0);
String n = MyApplication.getAppContext().NOTIFICATION_SERVICE;
NotificationManager nm= (NotificationManager) getActivity().getSystemService(n);

Notification notification = new Notification(R.drawable.icon, "test", System.currentTimeMillis());
notification.setLatestEventInfo(MyApplication.getAppContext(), "testtitle", "texttest",
                    contentIntent);
notification.defaults = Notification.DEFAULT_SOUND;
notification.flags = Notification.FLAG_AUTO_CANCEL;

nm.notify(1, notification);
4

1 回答 1

1

你有你的Flag设置notificationIntent而不是Intentfor ActivityB。改变这个

 Intent i = new Intent(getActivity(), B.class);
 getActivity().startActivity(i);

   Intent i = new Intent(getActivity(), B.class);
   i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
   getActivity().startActivity(i);

Google I/O Navigation这个链接对于理解堆栈的工作方式非常有帮助

于 2013-05-28T18:54:07.110 回答