我有一个Singleton Data类,用于存储数据。我在不同的Fragment
s。
加载第一个Fragment
时,Singleton中的所有字段都为null
都没有问题。当显示第二个Fragment
时,它依赖于这些字段来显示其数据。第一个Fragment
确保初始化这些字段。
然而,当用户按下第二个Fragment
中的主页按钮,并在大约一个小时后再次打开它时,Singleton已丢失其所有数据,而Fragment
尝试访问null
字段。
我想实现onSaveInstanceState
方法,但我对它的工作原理感到困惑 - 我没有将数据分配给它的实例。
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("DATA", Data.getInstance());
}
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
savedInstanceState.getSerializable("DATA"); //What to do with this?
}
欢迎任何帮助。
答案 0 :(得分:2)
片段是否都托管在同一个Activity中?如果是这样,为什么不将共享状态存储在Activity的成员中,并使用Activity的onSaveInstanceState()和onCreate()来保存和恢复它。在你的片段中,你可以做...
((MyActivityClass)getActivity()).getSharedState()
否则,您可以使您的单例对象管理可以序列化和反序列化的成员对象:
MySingleton.instance().saveTo(outState);
MySingleton.instance().restoreFrom(savedInstanceState);
MySingleton.instance().getState();
哪里
public void restoreFrom(Bundle savedInstanceState) {
mState = savedInstanceState.getSerializable("DATA");
}
答案 1 :(得分:0)
你可以看看this。 onSaveInstanceState 方法,如果你需要携带大型物体,这是不可取的。