我有一个 Singleton Data 类,我用它来存储数据。我在不同的 Fragment
中访问它。
当加载第一个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?
}
欢迎任何帮助。
最佳答案
fragment 是否都托管在同一个 Activity 中?如果是这样,为什么不将共享状态存储在Activity 的一个成员中,并使用Activity 的onSaveInstanceState() 和onCreate() 来保存和恢复它。然后在你的 fragment 中你可以做......
((MyActivityClass)getActivity()).getSharedState()
否则,您可以让您的单例对象管理一个可以序列化和反序列化的成员对象:
MySingleton.instance().saveTo(outState);
MySingleton.instance().restoreFrom(savedInstanceState);
MySingleton.instance().getState();
在哪里
public void restoreFrom(Bundle savedInstanceState) {
mState = savedInstanceState.getSerializable("DATA");
}
关于java - 单例的 OnSaveInstanceState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11484627/