gpt4 book ai didi

java - 单例的 OnSaveInstanceState

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:09:17 29 4
gpt4 key购买 nike

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com