AndroidフラグメントonRestoreInstanceState


120

私は何かが足りないFragmentonRestoreInstanceState()ですか、それともメソッドがありませんか?そうでない場合、どうすれば同様のことを達成できますか?

回答:


200

フラグメントにはonRestoreInstanceStateメソッドがありません。

onActivityCreated保存されたインスタンス状態(またはnull)のバンドルを受け取るでも同じ結果が得られます。

ここでソースコードを確認してください。


89
それは一貫したデザインではありませんよね?
Ehtesh Choudhury、2012

4
これはまた、フラグメントの再開を処理しませんか?構成の変更は問題ありませんが、フラグメントからアクティビティに移動してからフラグメントに戻るとどうなりますか?
speedynomads 2013年

1
フラグメントは最初はアクティビティに属している必要があるため、フラグメントに保存すると、親アクティビティに保存されます。したがって、そのフラグメント(アクティビティに属している)を残してフラグメントに戻ると、すべての値が親アクティビティから復元されます
Shaun

3
onActivityCreated()はフラグメントの状態を復元する唯一の方法ではありません。onCreate()、onCreateView()、またはonActivityCreated()のいずれかで復元できます。 developer.android.com/guide/components/fragments.html
shaby

1
@EhteshChoudhury Androidアプリ開発では、「一貫したデザイン」はありません。すべてがめちゃくちゃで、すべてが「非推奨」です。
Karanveer Singh 2018

43

私はあなたが答えを受け入れたことを知っていますが、フラグメントに関する公式のドキュメントを読んでください、そしてそれは述べています(段落「フラグメントのライフサイクルの処理」):

アクティビティのプロセスが強制終了され、アクティビティが再作成されたときにフラグメントの状態を復元する必要がある場合に備えて、バンドルを使用してフラグメントの状態を保持できます。フラグメントのonSaveInstanceState()コールバック中に状態を保存し、onCreate()、onCreateView()、またはonActivityCreated()のいずれかで状態を復元できます。

:だから、あなたが最も適していることを使用することができonCreate()onCreateView()またはをonActivityCreated()


29

フラグメントガイドのListFragmentの例では、以下を見つけることができます。

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("curChoice", mCurCheckPosition);
}

次のように使用できます:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if (savedInstanceState != null) {
        // Restore last state for checked position.
        mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
    }
}

onActivityCreated() フラグメントがスタックから戻った後に呼び出されます。


13

onViewStateRestoredof Fragmentはの同等onRestoreInstanceStateですActivity。しかし、それはonActivityCreated(Bundle)前後に呼ばれonStart()ます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.