FragmentTransaction
のattach()
メソッドとdetach()
メソッドのドキュメントを調べたところです。
attach()
:detach(Fragment)
を使用してUIから以前にデタッチしたフラグメントを再アタッチします。これにより、ビュー階層が再作成され、UIにアタッチされて表示されます。
さて、それはどういう意味ですか?
具体的には、例を見ました:
_mMapFragment = new MapFragment();
ft.beginTransaction(mMapFragment)
.attach()
.add(R.id.container, mMapFragment)
.commit();
_
attach()
を削除して再試行しました。違いに気付きませんでした。この例でattach
は何をしますか?これと比較した違いは何ですか:
_ft.beginTransaction()
.add(R.id.container, mMapFragment)
.commit();
_
上記の例では違いを示すのに十分ではない場合... attach()
とdetach()
を明示的に呼び出す必要があるのはいつなのか知りたいだけです。追加/削除/置換に関する違いを説明できるとよいでしょう。
何が起こっているのかを理解するには、 FragmentTransaction Documentation のDetach and Removeの定義を見ることをお勧めします。
UIから特定のフラグメントをデタッチします。これは、バックスタックに置かれたときと同じ状態です。フラグメントはUIから削除されますが、その状態はまだフラグメントマネージャーによってアクティブに管理されています。この状態になると、そのビュー階層は破棄されます。
既存のフラグメントを削除します。コンテナに追加された場合、そのビューもそのコンテナから削除されます。
detachingによって、フラグメントビューのみを破棄し、フラグメントマネージャでその状態を保持します。ただし、removingにより、フラグメントマネージャからフラグメントとその状態を削除します。さらに、フラグメントビューがUIコンテナに追加された場合は削除されます。したがって、どちらもフラグメントビューを破棄しますが、デタッチによりフラグメントマネージャにフラグメントの状態が保持されます。
ここで、アタッチと追加を見てみましょう。
アクティビティ状態にフラグメントを追加します。オプションで、このフラグメントは、アクティビティのコンテナビューにビュー(Fragment.onCreateViewがnull以外を返す場合)を含めることもできます。
Detach(Fragment)を使用してUIから以前にdeatchedした後に、フラグメントを再アタッチします。これにより、ビュー階層が再作成され、UIにアタッチされて表示されます。
フラグメントを追加すると、アクティビティ状態に追加され、そのビューが定義済みのコンテナビューに追加されます。ただし、フラグメントがまだUIに追加されていない場合は、何も添付しないことで表示されます。フラグメントマネージャーにアタッチするだけです。ただし、ビューが既にUIのコンテナーに追加されており、その後で切り離された場合、アタッチするとそのコンテナーに再び表示されます。最後に、フラグメントビューを一時的に破棄し、アクティビティ内の状態を失わずに将来的にそのビューを表示および構築する場合は、アタッチとデタッチを使用できます。