我有两项活动(A和B)。活动A调用活动B.活动B有这样的后退(向上)按钮:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
现在按下此UP按钮时,再次调用onCreate of activity A。在活动A中,有一个classId
变量(我从Intent
获得)我想要保留。为此,我在活动A onCreate
中有以下代码:
if (savedInstanceState == null)
{
Intent intent = getIntent();
classId = intent.getIntExtra("CLASS_ID", 0);
}
else
{
classId = savedInstanceState.getInt("CLASS_ID");
}
我还覆盖了onSavedInstanceState
方法:
@Override
protected void onSaveInstanceState(Bundle savedInstanceState)
{
savedInstanceState.putInt("CLASS_ID", classId);
super.onSaveInstanceState(savedInstanceState);
}
我正在关注这个答案: onCreate being called on Activity A in up navigation
我面临的问题是,当我通过传回活动B中的按钮再次来到活动A时,onCreate被调用,我发现savedInstanceState为NULL。
修改
还有其他方法可以保存我的classId
变量,这样当我再次返回活动A时,我可以使用它吗?
修改2
如果我将活动A的启动模式设置为清单文件中的SingleTop
,我的问题就会得到解决。这是正确的做法吗?
答案 0 :(得分:1)
您不应该假设每次进入下一个活动时都会onSaveInstanceState
调用。请参阅文档
在活动被杀之前调用此方法,以便在将来某个时间返回时可以恢复其状态。例如,如果活动B在活动A前面启动,并且在某些时候活动A被杀死以回收资源,活动A将有机会通过此方法保存其用户界面的当前状态,以便在用户返回时对于活动A,可以通过onCreate(Bundle)或onRestoreInstanceState(Bundle)恢复用户界面的状态。
您可以进一步咨询官方文档here
答案 1 :(得分:0)
试试这个
public class SingletonHolder {
//your id here as what data type you want
private static SingletonHolder instance;
public static SingletonHolder getInstance() {
if (instance == null) {
instance = new SingletonHolder();
}
return instance;
}
//set getter setter here
}
如果不成功,请随时发表评论
答案 2 :(得分:0)
我将活动A的launchMode
更改为singleTop
文件中的mainfest
,如下所示:
android:launchMode="singleTop"
我在SO上跟踪了这个问题:Setting launchMode="singleTask" vs setting activity launchMode="singleTop"
通过使用此方法,活动A不会被销毁,当我刚刚完成活动B或单击活动B中的向上导航时,活动A的现有实例将再次启动。