2012-03-26 10 views
5

アプリケーションの状態を保存して、閉じた状態から再び開いたときに最後のフラグメントが表示され、バックスタックが保持されるようにしたいとします。私は、姿勢変化にとき、またはシステムがonSaveInstanceState()/onRestoreInstanceState()を使用する場合にそうであるように(リソースを解放するためにアプリを殺すだけでなく、このような状態にアプリケーションが閉じられるたびに保存したいと思います。アプリケーションのバックスタックをバンドルに保存するにはどうすればよいですか?

これまでのところ私は、以前のフラグメントとその状態をSharedPreferencesに保存して後で復元することで、元のフラグメントとその状態を元に戻すことができましたが、フラグメントバックスタックは保持されないため、アプリケーションをロードして戻るボタンを押してアプリケーションのフローで「アップ」すると、アプリケーションは終了するのではなく終了します。

私がこの時点で必要とするのは、アプリケーションバックスタックにアクセスし、必要に応じてバンドルに保存できることですシステムはで行います。 FragmentManager.saveFragmentInstanceState()のドキュメントを読んだことがありますが、これを使って目標を達成する方法がわかりません。誰かが私を正しい方向に向けることができますか?

私は、Android互換ライブラリーからのフラグメントの実装を使用しています。

答えて

4

は、私の知る限りではAndroidシステムは、それが唯一give youすべてのタスクのトップActivityが実行されていることができ、タスクの背中スタックを得ることはできません。したがって、Activitiesバックスタックを維持する独自のメカニズムを実装する必要があります。 LocalActivityManagerの実装は、特にsaveInstanceState()メソッドを手助けするかもしれません。だから、何か似たようなことをして、いつでもバックスタックでアクティビティのonSaveInstanceState(Bundle)を呼び出してから、Bundle(ファイルなど)を残しておくことができます。 Fragmentsを使用する場合は、バックスタックを維持する必要があります。

おそらく、android:alwaysRetainTaskStateはスタックをバック管理に問題はなく、ダイビングを解決するためにあなたを助けるかもしれません。

+0

'android:alwaysRetainTaskState'は面白そうです。私が調査する時間があったら、私は報告します。 – howettl

関連する問題