gpt4 book ai didi

android - 覆盖 onSavedInstanceState : savedInstanceState object is always null

转载 作者:行者123 更新时间:2023-11-30 00:38:01 28 4
gpt4 key购买 nike

我有两个 Activity (A 和 B)。 Activity A 调用 Activity B。Activity B 有这样的后退(向上)按钮:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

现在,当按下向上按钮时,将再次调用 Activity A 的 onCreate。在 Activity A 中,有一个我想保留的 classId 变量(我从 Intent 中获得)。为此,我在 Activity 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);
}

我正在关注这个 SO 答案: onCreate being called on Activity A in up navigation

我面临的问题是,当我通过在 Activity B 中传递后退按钮再次回到 Activity A 时,onCreate 被调用并且我发现 savedInstanceState 为 NULL。

编辑:

有没有其他方法可以保存我的 classId 变量,以便当我再次返回 Activity A 时可以使用它?

编辑2

如果我在 list 文件中将 Activity A 的启动模式设置为 SingleTop,我的问题就会得到解决。这是正确的方法吗?

最佳答案

你不应该假设 onSaveInstanceState 会在你每次进入下一个 Activity 时调用。请参阅文档

此方法在 Activity 可能被终止之前调用,以便当它在未来某个时间恢复时可以恢复其状态。例如,如果 Activity B 在 Activity A 之前启动,并且在某个时刻 Activity A 被杀死以回收资源, Activity A 将有机会通过此方法保存其用户界面的当前状态,以便在用户返回时对于 Activity A,可以通过 onCreate(Bundle) 或 onRestoreInstanceState(Bundle) 恢复用户界面的状态。

可以进一步引用官方文档here

关于android - 覆盖 onSavedInstanceState : savedInstanceState object is always null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43087046/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com