1

実行するgetSupportFragmentManager().popBackStack();と、バック スタックがポップされ、ポップされたバック スタック エントリに関連付けられたフラグメント トランザクションが実行されます。

私は3つのフラグメントを持っています:
- FragmentA
- FragmentB
- FragmentC

ユーザーがプロモートすると、私のアクティビティは 3 つのトランザクションを実行します。

  1. フラグメント A が最初にコンテナーに追加されます。
  2. 次に、FragmentA がデタッチされ、FragmentB が追加されます。そして、トランザクションがバックスタックに追加されます。
  3. 次に、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 に置き換えるにはどうすればよいですか。

4

1 に答える 1