我有碎片我保留在FragmentManager的后台。每一个片段状态保存与成员变量方位的变化,像这样的例子:在堆栈中使用onSaveInstanceState和fragment?
@Override
public void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putLong("userId", mUserId);
outState.putString("username", mUsername);
}
我的问题是,如果有一个方向的变化,因为在堆栈中的每个片段被通过的onSaveInstanceState叫,我得到一个空指针异常,因为成员变量不再存在。
关于如何解决这个问题的任何想法?
你能提供你的logcat错误信息吗? – 2013-04-08 07:31:31
onSaveInstanceState在应用实际更改之前被调用,所以当您调用它们时,您的变量应该存在,除非它们由于代码中的其他错误而为空。发布一些更多的代码以及Logcat的错误输出形式。 – Shade 2013-04-10 12:09:34
我可以向你保证我的变数是好的。我认为问题在于,我们在后台堆栈中的碎片在拆卸时并没有进入保存状态状态, onSaveInstanceState只在活动被销毁时调用,但我的变量不再存在。所以我目前的解决方案是:“if(mUserId!= null && mUsername!= null)...”。这并不美观,但它解决了这个问题。如果片段被拆除时没有调用片段,我觉得有一个片段的onSaveInstanceState方法很奇怪。 – 2013-04-10 16:07:28