2012-12-04 8 views
10

docsのFragmentTransactionアイテムでは、メソッドreplace()は、現在のビューで追加されたすべてのフラグメントに対してメソッドremove()を呼び出した後、メソッドadd()と呼ばれるメソッドと同じです。この場合、前のフラグメントを回復するために、addBackToStack()を使用することができます。これは、フラグメントマネージャがトランザクション状態をまだ管理していることを意味し、スタックをポップしたときにその動作を戻します。一方でFragmentTransaction内のadd()。addToBackStack()、add()。detach()およびreplace()。addToBackStack()との違いは何ですか?

は、我々はadd()を使用してトランザクションを実装する場合、add().addBackToStack()の使用を超えて、私たちはdetach()メソッドを使用してaddBackToStack()同じ振る舞いを持つattach()を、使用してフラグメントを回復することができます。

これらのシナリオの背景にある違いは何ですか?

答えて

11

詳細を調べたところ、detach()addToBackStack()の違いは、フラグメントのライフサイクルにあります。バックスタックにFragmentを追加すると、メソッドonPause()onStop()、およびonDestroyView()の後に順番に呼び出されます。この状態では、フラグメントはビューに関連付けられたリソースをクリーンアップし、そこに再び滞在するのを待っています。バックスタックからレイアウトに戻すことは、フラグメントがそのユーザインタフェースを描画するためだけにメソッドonCreateView()と呼ばれます。実際には、断片は破壊されません。断片の状態と の最終的なクリーンアップを行うために、onDestroy() onDetach:我々はフラグメントを除去または置換するdetach()を使用する場合、他の側面において

は、全て同じ方法は、この2つのメソッドを追加する(onPause(), onStop(), onDestroyView())最初に引用シーケンスで呼び出されます()を使用して、そのフラグメントをもはやそのアクティビティーに関連付けられないように切り離します。

基本的に、舞台裏では、同じ動作をしません。addToBackStack()を使用すると、フラグメントはインスタンス化されたままであり、detach()は使用しません。

関連する問題