8

私のアプリはいくつかの断片と活動をしています。主な親アクティビティーのライフサイクルの間、アプリは他のアクティビティーでユーザーに情報/オプションを提示します。親アクティビティの状態が保存されるようにバインドされているときに、フラグメントトランザクションをどのように処理しますか?

フラグメントのドキュメントがあり、次の規定のために)(コミット:

注意:あなたは、その状態を保存活動にのみ前にcommit()を使用してトランザクションをコミットすることができます(ユーザーが活動を離れたとき) 。その時点以降にコミットしようとすると、例外がスローされます。これは、アクティビティーをリストアする必要がある場合、コミット後の状態が失われる可能性があるためです。コミットを失っても問題がない場合は、commitAllowingStateLoss()を使用してください。

親アクティビティに戻った後、私はアプリケーションでナビゲーションを設計した方法に不可欠なFragmentTransactionsを使用できなくなりました。

私が考えていた解決策の1つは、自分のアクティビティを断片に変更することですが、最終的には自分のアクティビティを開始すると考えられるアプリ内課金も使用します。これは膨大な制限のように思えます。開発中のある時点では別のアクティビティを表示する必要があります。

私はおそらくcommitAllowingStateLoss()を使用して離れることができますが、Androidのタブレットアプリケーション開発では大きなコンセプトが欠けているような気がします。 FragmentTransactionsをコミットする能力を失うことなく、アクティビティを開始して親アクティビティ(フラグメントを管理する)に戻る方法はありますか?

+1

この[**ブログ投稿**](http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html)を読むと役立つ可能性があります。 –

答えて

3

親アクティビティが再開/開始されたときに、前回の一時停止中であってもフラグメントトランザクションを再コミットできます。ドキュメントは、アクティビティが一時停止されている期間(および状態が保存されている間)にコミットできないことと、再開される前にコミットできないことを意味します。別のアクティビティを訪問した後に親アクティビティに戻る場合は、Activity.onStart()が呼び出された後にフラグメントトランザクションを自由に使用することができます。

この制限の理由は、Androidがアクティビティに関連付けられたフラグメントの状態をActivity.onSaveInstanceState()の間保存するためです。この時点以降にフラグメントトランザクションを作成しようとすると、アクティビティ状態を再作成するために使用する情報はActivity.onSaveInstanceState()にキャプチャされたデータだけだったため、Androidでそのアクティビティを再作成+復元する必要がある場合は状態損失にさらされます。

関連する問題