14

次の方法を使用してフラグメントを切り替えるアクティビティがあります。

public void setCurrentFragment(Fragment fragment) {
     FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
     transaction.setCustomAnimations(R.anim.slide_left_right_in, R.anim.slide_left_right_out, R.anim.slide_right_left_in, R.anim.slide_right_left_out);
     transaction.replace(R.id.contentFrameLayout, fragment, Integer.toString(fragmentId++));
     transaction.addToBackStack(Integer.toString(fragmentId));
     transaction.commit();
}

私のナビゲーション スタックは次のようになります。

N-2 -> N-1 -> N

特定のフラグメント N が「開かれた」ときに、前のフラグメント (N-1) をバックスタックから削除したいので、「戻る」を押すと N-2 フラグメントが復元されます。

N フラグメントで FragmentManager.popBackStack(..) を呼び出すと、N および N-1 フラグメントが削除されます。

N フラグメントに切り替える直前に、N-1 フラグメントで popBackStack(..) を呼び出そうとしました。ただし、その場合、N-2 フラグメントが再開され、その後にのみ N フラグメントが表示されます。

私の質問は、現在のフラグメントをポップせずにバックスタックから前のフラグメントを削除する方法はありますか?

4

2 に答える 2

1

public abstract void popBackStack (int id, int flags)バックスタックに使用します。 たとえば、これを確認してくださいgetSupportFragmentManager().popBackStack(fragmentId,0);

于 2014-01-30T09:33:29.700 に答える