I have an activity in which I am switching fragments using following method:
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();
}
My navigation stack looks like this:
N-2 -> N-1 -> N
When certain fragment N is 'opened' I want previous one (N-1) to be removed from the backstack, so when I press 'back' I want N-2 fragment to be restored.
When I call FragmentManager.popBackStack(..) in N fragment it removes N and N-1 fragment.
I have tried to call popBackStack(..) in N-1 fragment right before switching to N fragment. But in that case N-2 fragment is resumed, and only after that N fragment is displayed.
My question is: is there any way to remove previous fragment from backstack without popping current fragment?
use public abstract void popBackStack (int id, int flags)
to back stack. Check this
for example getSupportFragmentManager().popBackStack(fragmentId,0);