Android Activity 来自 Notification - FragmentManager backstack 为零
Android Activity from Notification - FragmentManager backstack is zero
我四处搜索但找不到答案。
我的app是基于fragments的,MainActivity
是入口点。当用户单击通知时,我会使用 PendingIntent
触发所需的行为,其中包含关于需要调用哪个片段的特定标志。
当我需要的片段已经显示时,我的问题就出现了。当通过 PendingIntent
输入 MainActivity
时,fragmentManager.getBackStackEntryCount()
将 return 归零。我猜这是因为 activity 与我已有的 运行 不同。然后再次调用相同的片段,这弄乱了我的 UI(并且可能会崩溃,因为 Otto
总线已经被注册)。
我的问题是:当通知触发 activity 时,检测 运行 应用程序状态(即正在显示哪个片段)的最佳方法是什么?谢谢。
我猜你可以用 FragmentManager class 做到这一点。
你有几个有趣的方法。例如,findFragmentByTag(String tag)
使您能够知道是否存在具有特定 TAG 的片段。
此外,您确定您没有重新创建一个新的 Activity(在当前的之上)吗?
感谢@Gordak 的建议,我得以解决我的问题。我需要的是我的(待定)Intent 中的标志组合:
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_CLEAR_TOP);
这样,如果调用的activity在最上面,它不会被销毁(从而保持FragmentManager的后台堆栈)但是方法onNewIntent(Intent intent)
会被触发,让你对它做出反应.这在文档中描述
FLAG_ACTIVITY_CLEAR_TOP
。
我四处搜索但找不到答案。
我的app是基于fragments的,MainActivity
是入口点。当用户单击通知时,我会使用 PendingIntent
触发所需的行为,其中包含关于需要调用哪个片段的特定标志。
当我需要的片段已经显示时,我的问题就出现了。当通过 PendingIntent
输入 MainActivity
时,fragmentManager.getBackStackEntryCount()
将 return 归零。我猜这是因为 activity 与我已有的 运行 不同。然后再次调用相同的片段,这弄乱了我的 UI(并且可能会崩溃,因为 Otto
总线已经被注册)。
我的问题是:当通知触发 activity 时,检测 运行 应用程序状态(即正在显示哪个片段)的最佳方法是什么?谢谢。
我猜你可以用 FragmentManager class 做到这一点。
你有几个有趣的方法。例如,findFragmentByTag(String tag)
使您能够知道是否存在具有特定 TAG 的片段。
此外,您确定您没有重新创建一个新的 Activity(在当前的之上)吗?
感谢@Gordak 的建议,我得以解决我的问题。我需要的是我的(待定)Intent 中的标志组合:
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_CLEAR_TOP);
这样,如果调用的activity在最上面,它不会被销毁(从而保持FragmentManager的后台堆栈)但是方法onNewIntent(Intent intent)
会被触发,让你对它做出反应.这在文档中描述
FLAG_ACTIVITY_CLEAR_TOP
。