public void showFragmentNoBackStack(String fragmentTag, Object dataForFragment) { showFragment(fragmentTag, dataForFragment, false); } public void showFragmentAddToBackStack(String fragmentTag, Object dataForFragment) { showFragment(fragmentTag, dataForFragment, true); } public void showFragment(String fragmentTag, Object object, Boolean addToBackStack) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); switch (fragmentTag) { case SIMPLE_SEARCH_FRAGMENT_TAG: fragment = new SimpleSearchFragment(); break; case ADVANCED_SEARCH_FRAGMENT_TAG: fragment = new MultiSearchFragment(); break; } fragmentTransaction.replace(R.id.main_activity_container, fragment); if (addToBackStack) fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } 

Then, in B, I press back and the first fragment is displayed above what should be removed. Why is that?

MainActivity:

  @Override public void onBackPressed() { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { getSupportFragmentManager().popBackStack(); } else { finish(); } } 
  • Show the activation code and the code for both fragments. This code works correctly for me. - post_zeew
  • The first code is not completely clear. What is the addToBackStack method from where does it addToBackStack from? - DevOma

2 answers 2

Try it, it should work.

 @Override public void onBackPressed() { if (getFragmentManager().getBackStackEntryCount() > 0) { getFragmentManager().popBackStack(); } else { super.onBackPressed(); } } 
  • Strange, but getFragmentManager (). GetBackStackEntryCount () returns 0. - Igor
  • And tried so, fragmentTransaction.addToBackStack("fragmentB"); - DevOma
  • Changed to getSupportFragmentManager () - Now the number returns the correct one, but popBackStack does not remove the previous fragment. Those. returned to the original problem - Igor
  • Do you onBackPressed() in an Activity? - DevOma
  • Yes, maybe some problems with using Support? - Igor

Given that getSupportFragmentManager().popBackStack(); does not work,

 @Override public void onBackPressed() { if (getSupportFragmentManager().getBackStackEntryCount() == 1) finish(); else getSupportFragmentManager().beginTransaction().remove(fragment).commit(); super.onBackPressed(); }