7

我有一个 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?
}

欢迎任何帮助。

4

2 回答 2

2

片段是否都托管在同一个活动中?如果是这样,为什么不将共享状态存储在 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");
}
于 2012-07-14T16:08:18.947 回答
0

你可以看看这个onSaveInstanceState方法如果您需要携带大物件,则不太可取。

于 2012-07-14T14:57:28.913 回答