2012-07-14 8 views
6

私はデータを格納するために使用するSingleton Dataクラスを持っています。私は別のFragmentでアクセスしています。OnSaveInstanceState with Singleton

最初のFragmentがロードされても、シングルトン内のすべてのフィールドがnullであることは問題ありません。 2番目のFragmentが表示されている場合は、これらのフィールドによってデータが表示されます。最初のFragmentは、これらのフィールドが確実に初期化されるようにします。ユーザが第2 Fragmentでホームボタンを押し、後の時間かそこらのようにそれを再度開くしかし

、シングルトンは、すべてのデータを失ってしまった、とFragmentnullフィールドにアクセスしようとします。

私は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

:あなたが行うことができ、あなたの断片...そうでなければ

((MyActivityClass)getActivity()).getSharedState() 

では、あなたのシングルトンオブジェクトをシリアル化および非直列化可能なメンバオブジェクトを管理作ることができますしかし、なぜシングルトンがすべてのデータを失うのか理解できないのですか?アプリケーションはまだバックグラウンドで実行されていますか?私はアプリケーションで同じパラダイムを使用しており、このデータ損失は見られませんでした。 – Aviral

+0

私はこの問題が発生しているので、それはそうですね。 – nhaarman

+0

面白い!シングルトンのデータが何の原因で消滅するかについて考えているなら、投稿してください。これは私の心配を引き起こしている。ありがとう。 – Aviral

答えて

1

フラグメントはどちらも同じアクティビティでホストされていますか?その場合は、アクティビティのメンバーに共有状態を保存し、アクティビティのonSaveInstanceState()およびonCreate()を使用して保存して復元してください。

MySingleton.instance().saveTo(outState); 
MySingleton.instance().restoreFrom(savedInstanceState); 
MySingleton.instance().getState(); 

public void restoreFrom(Bundle savedInstanceState) { 
    mState = savedInstanceState.getSerializable("DATA"); 
} 
+0

パフォーマンス上の理由から、Parcableを使用する方が効果的です。 – Roel

0

thisをご覧ください。 onSaveInstanceStateメソッド大きなオブジェクトを運ぶ必要がある場合はそれほどお勧めできません。