在我的导航中,可以生成以下活动序列: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对象时手动填充先前必需的参数。这是一种方法吗?
感谢。
答案 0 :(得分:4)
它就像docs所说的那样简单。
如果同时设置FLAG_ACTIVITY_CLEAR_TOP
和FLAG_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。