android - startActivity 创建一个新的 Activity 而不是放在前面(标志集)

标签 android android-intent actionbarsherlock fragment

假设有两个 Activity A 和 B。

  1. A 启动 Activity B(将位于后台堆栈的顶部)
  2. 创建一个挂起的 Intent 并将其附加到允许返回到新 Activity B 的通知。设置标志 FLAG_ACTIVITY_REORDER_TO_FRONT 是为了只有一个 Activity B(我们在步骤 1 中创建的那个)

  3. 我退出应用程序,打开通知栏并单击我的通知。我希望我回到步骤 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,而不是 ActivityBIntent。改变这个

 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/

相关文章:

Android 操作栏列表导航停止工作

Android fragment 生命周期

android - 如何在 Android Studio 中播放音乐?

安卓权限: Perform task after user pressed "Allow"

安卓 Intent : Start activity using class name from another app that has the same sharedUserId

android - 尝试启用到 Android 应用程序的深度链接,测试 Intent 无法启动 Activity

android - 在 4.0.3 和 4.1 上工作,但在 2.1、2.2 和 2.3 上出错 - Sherlock 操作栏

javascript - 在数组中保存类+拼接删除错误的对象

java - 运行时 Google map View 错误 - Droid

android - 在下一个 Activity 中检索时,放入 Intent 额外的 LinkedList 被重铸为 ArrayList