7

データを格納するために使用する Singleton Data クラスがあります。私は別Fragmentの s でアクセスしています。

最初のFragmentものが読み込まれると、Singleton のすべてのフィールドが であることは問題ありませんnull。2 番目Fragmentが表示されると、これらのフィールドに依存してそのデータが表示されます。1 つ目Fragmentは、これらのフィールドが確実に初期化されるようにします。

ただし、ユーザーが 2 番目の でホーム ボタンを押しFragment、約 1 時間後に再び開くと、シングルトンはすべてのデータを失い、フィールド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

フラグメントは両方とも同じアクティビティでホストされていますか? その場合は、共有状態をアクティビティのメンバーに保存し、アクティビティの 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

You might take a look a this. onSaveInstanceState method it's not very advisable if you need to carry large objects.

于 2012-07-14T14:57:28.913 に答える