11

Android docsの FragmentTransaction 項目では、メソッドは、現在のビューに追加されたすべてのフラグメントに対してreplace()メソッドを呼び出してからメソッドを呼び出すことと同じであると説明されています。この場合、前のフラグメントを復元するには、 を使用できます。これは、トランザクションの状態がまだフラグメント マネージャーによって管理されており、スタックからポップしたときにその操作を元に戻すことを意味します。remove()add()addBackToStack()

一方、 を使用してトランザクションを実装するadd()add().addBackToStack()、 を使用するだけでなく、detach()メソッドを使用して を使用してフラグメントを回復できます。attach()これらは と同じ動作をしaddBackToStack()ます。

では、これらのシナリオの舞台裏での違いは何でしょうか?

4

1 に答える 1

11

detach()との違いはaddToBackStack ()、フラグメントのライフサイクルにあります。フラグメントをバックスタックに追加すると、メソッドが順番に呼び出され、onPause()その後onStop()に呼び出されますonDestroyView()。この状態では、フラグメントはそのビューに関連付けられているリソースをクリーンアップし、再度呼び出されるのを待つためにそこに「留まり」ます。バックスタックからレイアウトに戻ることはonCreateView()、フラグメントがそのユーザーインターフェイスを描画するためだけのメソッドと呼ばれます。実際、フラグメントは破棄されません。

反対側でdetach()は、フラグメントを削除または置換するために使用する場合、最初に引用されたすべての同じメソッド(、、)が順番に呼び出され、次のonPause()2onStop()onDestroyView()のメソッドが追加されonDestroy()ます。onDetach()もはやその活動に関連付けられていません。

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

于 2012-12-21T12:53:42.443 に答える