我有一个主要活动(活动A),显示一个事件(我的应用程序是关于事件管理),我需要能够打开2个其他子活动,并能够“向上”导航到他们的父母(A) ,如图中所示
open open
Activity (A) ----------> SubActivity (B) ----------> SubActivity (C)
^ ^ | |
| | | |
| | Up | |
| -------------------------- |
| Up |
-----------------------------------------------------------
所以,我正在从任何子活动中触发此调用:
NavUtils.navigateUpFromSameTask(this);
并且为了确保不重新加载Activity(A),我在其AndroidManifest定义中使用singleTop
(这样当返回它时,它将具有相同的事件,其状态与我保留的相同):
android:launchMode="singleTop"
但问题是有一个新要求从系统通知中打开活动(A)并通过我要打开的eventId
传递额外值,如果我删除了singleTop
,它可以正常工作配置,但使用它,它给我以前加载的活动实例,甚至没有调用它的onCreate
或其他类似的东西,
那么,我应该怎么做才能处理Activity(A)的子导航及其通知导航?
答案 0 :(得分:3)
使用android:launchMode="singleTop"
将不会重新创建已存在的Activity!此外,生命周期稍有变化:当您已经存在已打开的活动并尝试从通知Activity.onCreate(Bundle)
打开“新实例”时,不会再次调用。相反,将调用方法Activity.onNewIntent()
。因此,您必须在活动中覆盖此方法。
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// Setup your UI Activity, just like you would to in the onCreate() method
}
更新:使用新的Intent重新启动Activity:
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// pass this extra from the notification only to make a new instance
boolean makeNewInstance = intent.getBooleanExtra("makeNewInstance", false);
if (makeNewInstance) {
finish(); // Finish the current activity
startActivity(intent); // Start new instance by simply using the intent passed as parameter
}
}
答案 1 :(得分:0)
在从系统通知打开时将值传递给Activity,并在onCreate中使其成为条件。只是一个疯狂的猜测。
答案 2 :(得分:0)
您必须扩展活动A,以便它可以找到它应该从现在的状态,以及通知的调用中显示的事件。也许您可以解释活动A如何获取有关要显示的事件的信息,然后我们可以帮助您扩展它以处理来自通知的调用。