実行するgetSupportFragmentManager().popBackStack();
と、バック スタックがポップされ、ポップされたバック スタック エントリに関連付けられたフラグメント トランザクションが実行されます。
私は3つのフラグメントを持っています:
- FragmentA
- FragmentB
- FragmentC
ユーザーがプロモートすると、私のアクティビティは 3 つのトランザクションを実行します。
- フラグメント A が最初にコンテナーに追加されます。
- 次に、FragmentA がデタッチされ、FragmentB が追加されます。そして、トランザクションがバックスタックに追加されます。
- 次に、FragmentC が fragmentB のみを置き換え、バック スタック エントリを変更して、ユーザーが戻るボタンを押したときに FragmentA が表示されるようにする必要があります。
トランザクション 3 を実行するコードは次のとおりです。
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
fm.popBackStack();
ft.remove(fragmentB)
.add(R.id.container, fragmentC, tag)
.addToBackStack(null)
.commit();
トランザクション 1 と 2 は正常に動作しているようです。ただし、トランザクション 3 を実行しようとすると、FragmentB が FragmentC に置き換えられますが、FragmentC が描画される直前に Fragment A も表示され、FragmentA は FragmentC の背後に表示され続けます。
私は何を間違っていますか?FragmentA をバックグラウンドで公開せずに FragmentB を FragmentC に置き換えるにはどうすればよいですか。