【发布时间】:2013-03-25 06:12:25
【问题描述】:
我有片段保存在 FragmentManager 的后台堆栈中。保存每个片段状态以使用成员变量更改方向,例如:
@Override
public void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putLong("userId", mUserId);
outState.putString("username", mUsername);
}
我的问题是,如果方向发生变化,由于 backstack 中的每个片段都通过 onSaveInstanceState 调用,我得到一个空指针异常,因为成员变量不再存在。
关于如何解决这个问题的任何想法?
【问题讨论】:
-
你能提供你的 logcat 错误信息吗?
-
onSaveInstanceState 在应用实际更改之前被调用,所以当你调用它们时你的变量应该存在,除非它们因为代码中的其他错误而为空。发布更多代码以及错误输出表单 Logcat。
-
我可以向您保证,我的变量没问题。我认为问题在于我在后台堆栈中的片段在被拆除时没有被调用 onSaveInstanceState; onSaveInstanceState 仅在活动被销毁时调用,但我的变量不再存在。所以我目前的解决方案是:“if (mUserId != null && mUsername != null) ...”。它不漂亮,但它解决了问题。如果在片段被拆除时没有调用它,我觉得有一个片段的 onSaveInstanceState 方法很奇怪。