私は5つのフラグメント(A、B、C、D、Eなど)と1つのアクティビティをコンテナで持っています。 フラグメントをコンテナに追加するときは、次のコードを使用します。中途半端なフラグメントトランザクションを削除するには
getSupportFragmentManager().beginTransaction().replace(R.id.mainContainerRL, fragment, tag).addToBackStack(tag).commit();
のは、私はAでいくつかのアクション時にフラグメントA. を追加したとしましょう、私はBでいくつかのアクション時に、フラグメントB. を追加し、私はCでいくつかのアクション時にC. フラグメントを追加し、私はフラグメントD.を追加しました Dで何らかのアクションが起こったら、フラグメントEを追加しました。
私のスタックは次のようになります。 A - > B - > C - > D - > E
フラグメントEで何らかのアクションが発生したら、フラグメントD、C、Bを削除して、ユーザーがクリックするとフラグメントAを直接表示する必要があります。
次のコードを使用してみました。断片Eの一部のアクションに
public void removeScreen(@NonNull String tag) {
FragmentManager manager = getSupportFragmentManager();
Fragment fragment = manager.findFragmentByTag(tag);
if (fragment != null) {
FragmentTransaction trans = manager.beginTransaction();
trans.remove(fragment);
trans.commitAllowingStateLoss();
}
}
、IフラグメントD、C、B(タグIフラグメントトランザクションのために使用されるものと同じである)のタグと上記関数と呼ばれます。今
私が間違っつもりどこ誰かが指摘する場合、それは非常に参考になるボタンフラグメントDが可視になってきているが、私は、フラグメントA.
を期待していたバックをクリックします。
ユーザー戻るボタンをクリックすると、 'fragmentManager.popBackStack()'を使ってE、D、C、Bフラグメントを取り除くことができます。 –
私がfragmentManager.popBackStack()を実行すると、フラグメントEが最初に削除されます。しかし、私はフラグメントEを保持し、バックグラウンドにあるフラグメントB、C、Dを削除したい。 –