使用附加功能CLEAR_TOP到上一个活动

时间:2012-07-15 08:42:38

标签: android android-intent

在我的导航中,可以生成以下活动序列:A,B,C,B,C,B,C,...,D。 D活动包含Back-button的覆盖方法,该方法将用户发送到带有Intent.FLAG_ACTIVITY_CLEAR_TOP参数的A活动。

活动A接收了许多必要的额外参数,我的问题是当我在D活动中使用此CLEAR_TOP标志触发startActivity时,活动A似乎没有获得任何先前的额外或甚至启动onResume方法。

这是否意味着CLEAR_TOP实际上是recreates目标活动而不是提出旧活动?而且,当我从活动D启动时,活动A中的restore those extra intent参数是否有任何系统自然的方法。

P.S。现在,我看到的唯一选择是在D活动中构造intent对象时手动填充先前必需的参数。这是一种方法吗?

感谢。

3 个答案:

答案 0 :(得分:4)

它就像docs所说的那样简单。

如果同时设置FLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_SINGLE_TOP,则新参数将被推送到onNewIntent()

答案 1 :(得分:4)

不确定您是否找到了解决方案,但是要覆盖目标活动的onNewIntent(Intent theNewIntent)方法&调用setIntent(theNewIntent)解决了它。

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    /*
     * This overrides the original intent.
     */      
    setIntent(intent);
}

答案 2 :(得分:2)

  

这是否意味着CLEAR_TOP实际上重新创建了目标活动   而不是提起旧的?

使用CLEAR_TOP标记时,定位活动does not recreate,但当您使用新意图显示活动A时,您只能在活动A中获得此新意图的附加内容。

  

并且,有没有任何系统自然的方法来恢复这些额外的   我从活动D中启动它时活动A中的意图参数?

当您离开活动A时,您可以将这些额外内容保存在文件,首选项或全局应用程序变量中。或者您可以在活动A中声明一个静态方法,将这些额外内容保存在其中,并且您可以在活动D中调用它强制出现活动A:
活动A:

Public class A extends Activity{
...
public static void saveExtras(){
//save extras in file,preferences,...
}
...
}     

活动D:

Public class D extends Activity{
...
public void forceActivityA(){
A.saveExtras();
Intent i = new Intent(this,A.class());
...
startActivity(i);
}
...
} 

修改
当活动A再次出现时,它的onCreate()方法再次调用,在这里你可以获得请求它的意图。然后你可以获得意图的标志并将其与67108864(CLEAR_TOP标志的常量)进行比较。如果它等于你可以从存储中检索数据(文件,首选项......)。要创建全局变量,你可以看到this question