假设有两个 Activity A 和 B。
- A 启动 Activity B(将位于后台堆栈的顶部)
创建一个挂起的 Intent 并将其附加到允许返回到新 Activity B 的通知。设置标志 FLAG_ACTIVITY_REORDER_TO_FRONT 是为了只有一个 Activity B(我们在步骤 1 中创建的那个)
我退出应用程序,打开通知栏并单击我的通知。我希望我回到步骤 1 中创建的 Activity B。嗯..它创建了一个新的 Activity B,将其放在后台堆栈的顶部。什么!?我不明白这种行为!
现在关于这方面的更多细节可能很重要(我是否检测到错误气味?):
步骤 1 和 2 在 Activity A 具有的 Fragment 中执行。
我使用支持的 v4 库, Activity 是 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);
最佳答案
您在 notificationIntent
上设置了 Flag
,而不是 ActivityB
的 Intent
。改变这个
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此链接对于理解堆栈的工作原理非常有帮助
关于android - startActivity 创建一个新的 Activity 而不是放在前面(标志集),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16799289/