add
とのもう 1 つの重要な違いreplace
は次のとおりです。
replace
既存のフラグメントを削除し、新しいフラグメントを追加します。これは、戻るボタンを押すと、置き換えられたフラグメントonCreateView
が呼び出されて作成されることを意味します。add
既存のフラグメントを保持し、新しいフラグメントを追加するのに対し、既存のフラグメントがアクティブになり、「一時停止」状態にならないことを意味するため、戻るボタンが押されたときonCreateView
に、既存のフラグメントに対して呼び出されません (新しいフラグメントが存在する前にあったフラグメント)追加した)。
フラグメントのライフ サイクル イベントに関しては onPause
、onResume
、onCreateView
およびその他のライフ サイクル イベントは の場合に呼び出されますが、 の場合にはreplace
呼び出されませんadd
。
編集: 彼女がGreenrobot の Eventbus のようなある種のイベント バス ライブラリを使用し、同じフラグメントを再利用してフラグメントを他の via の上にスタックする 場合は注意が必要ですadd
。このシナリオでは、ベスト プラクティスに従って でイベント バスonResume
を登録し、 で登録解除しても、フラグメントはこれらのフラグメント ライフ サイクル メソッドのいずれかを呼び出さないonPause
ため、追加されたフラグメントの各インスタンスでイベント バスが引き続きアクティブになります。add
その結果、フラグメントのアクティブなインスタンスごとにイベント バス リスナーが同じイベントを処理することになりますが、これは望ましくない場合があります。