使用singleTop进行Android上传导航

时间:2014-12-23 16:37:03

标签: android android-navigation

我有一个主要活动(活动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)的子导航及其通知导航?

3 个答案:

答案 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如何获取有关要显示的事件的信息,然后我们可以帮助您扩展它以处理来自通知的调用。