2016-04-27 1 views
2

フラグメントを持っていますonCreateView表示するデータをフェッチするためにバックグラウンドasyn呼び出しを行います。
バックグラウンドコールの結果であるオブジェクトをフラグメントのメンバ変数として保存します。
UIとデータがすべて表示されていて、ホームボタンを押すと背景に移動します。私は、アプリケーションを再開すると、私の断片によって膨らんだUIの中にデータがあります。
これで、次のことについてはわかりません。
1)onSaveInstanceStateにオブジェクトを保存する必要がありますか?
2)どこで復元する必要がありますか? onCreateViewで渡されたバンドルで?
3)データはいつ私のバンドルに保存されますか?私は、今すぐ保存せずにUIからデータを失うことがどのようにわかるのでしょうか?あなたの断片コンストラクタでフラグメントからのインスタンス状態の適切な使用

答えて

1

、次の行を追加します断片インスタンスが活動を横切って保持されているか否かを 再作成(例えば、構成変更のような)

setRetainInstance(true); 

コントロール。

+0

したがって、onSaveInstanceStateのバンドルに保存できますが、使用できません。 – Jim

0

データ(サイズ)によって異なります。

バックスタックにフラグメントを残したいと思いますか?

"home button action"と保持されていないFragmentでは、Parcelableインターフェイスを実装し、onSaveInstanceState()を使用して保存し、onCreateView()/ onCreate()を使用してBundleからデータを復元します。

戻るボタンを認識すると、データが失われます。活動のプロセスが終了し、アクティビティが再作成されたときに フラグメントの状態を復元する必要がある場合には

+0

ホームボタンを押してアプリケーションを開くと、 'onCreateView'は呼び出されません – Jim

+0

それはsetRetainInstance(true)でそのまま動作し、onCreate()はまだ呼び出されます。そして、あなたが保持されたフラグメントを使用する場合、なぜ最初の場所にデータを保存したいのですか? –

0

はまた活動のように、あなたは バンドルを使用して、フラグメントの状態を維持することができます。 フラグメントのonSaveInstanceState()コールバック の間に状態を保存し、onCreate()、onCreateView()、または onActivityCreated()のいずれかでリストアすることができます。状態の保存の詳細については、 アクティビティ文書を参照してください。

あなたのフラグメントは、表示されるたびにデータをフェッチするように見えます。

非同期フェッチを避けるためにデータを保存する場合は、Bundleを使用してデータを保存する必要があるonSaveInstanceStateを使用できます。 onCreateViewチェックで次に

savedInstanceState場合はnullであり、それがある場合は、非同期はあなたにsavedInstanceStateBundleからのデータを再作成するそれ以外の場合は、フェッチありません。

関連する問題