add an OnBackStackChangedListener to fragmentmanager , then when the last backstack entry is fragment 2 popBackStack two times like this :
0 FragmentHome ( back_stack_name : "fragment_home" )
1 Fragment1( back_stack_name : "fragment_1" )
2 Fragment2 ( back_stack_name : "fragment_2" )
3 Fragment3 ( back_stack_name : "fragment_3" )
code :
note that you should add OnBackStackChangedListener in fragment3 and then after poping backstack remove it from fragmentmanager
// add in fragment3
final FragmentManager fragment_manager = getActivity().getSupportFragmentManager();
fragment_manager
.addOnBackStackChangedListener(new OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
if (fragment_manager.getBackStackEntryCount() > 0) {
String last_fragment_name = getLastBackStackFragmentName(fragment_manager);
if (last_fragment_name.equals("fragment_2")) {
fragment_manager.removeOnBackStackChangedListener(this);
fragment_manager.popBackStack();
fragment_manager.popBackStack();
}
}
}
});
private String getLastBackStackFragmentName(FragmentManager fragment_manager ) {
int back_stack_count =fragment_manager.getBackStackEntryCount();
String last_fragment_name = "";
if (back_stack_count>0) {
last_fragment_name = fragment_manager.getBackStackEntryAt(
back_stack_count).getName();
}
return last_fragment_name;
}