追加したかっただけです:-
以下を使用してバックスタックからポップアウト
fragmentManager.popBackStack()
トランザクションからフラグメントを削除するだけであり、画面からフラグメントを削除する方法はありません。したがって、理想的には見えないかもしれませんが、2つまたは3つのフラグメントが重なり合っており、戻るキーを押すと、UIが雑然として積み重なっているように見えることがあります。
簡単な例を挙げましょう:-
fragmentmanager.replace()を使用してFragmnet BをロードするfragmentAがあるとします。その後、このトランザクションを保存するためにaddToBackStackを実行します。したがって、フローは:-
ステップ1-> FragmentA-> FragmentB(FragmentBに移動しましたが、フラグメントAはバックグラウンドにあり、表示されません)。
次に、フラグメントBでいくつかの作業を行い、[保存]ボタンを押します。保存すると、フラグメントAに戻ります。
ステップ2-> FragmentBを保存すると、FragmentAに戻ります。
ステップ3->よくある間違いは...フラグメントBでは、フラグメントManager.replace()フラグメントBをフラグメントAで実行します。
しかし実際に起こっていることは、フラグメントAを再度ロードして、フラグメントBを置き換えることです。これで、2つのFragmentAがあります(1つはSTEP-1から、もう1つはこのSTEP-3から)。
FragmentsAの2つのインスタンスは互いに重なり合っているため、表示されない場合がありますが、存在しています。
したがって、上記の方法でバックスタックをクリアしても、トランザクションはクリアされますが、実際のフラグメントはクリアされません。したがって、このような特定の場合に理想的には、保存ボタンを押したときに、fm.popBackStack()またはfm.popBackImmediate()を実行するだけで、fragmentAに戻る必要があります。
正しいStep3-> fm.popBackStack()は、すでにメモリにあるfragmentAに戻ります。