Fragments onResume from back stack Fragments onResume from back stack android android

Fragments onResume from back stack


For a lack of a better solution, I got this working for me:Assume I have 1 activity (MyActivity) and few fragments that replaces each other (only one is visible at a time).

In MyActivity, add this listener:

getSupportFragmentManager().addOnBackStackChangedListener(getListener());

(As you can see I'm using the compatibility package).

getListener implementation:

private OnBackStackChangedListener getListener()    {        OnBackStackChangedListener result = new OnBackStackChangedListener()        {            public void onBackStackChanged()             {                                   FragmentManager manager = getSupportFragmentManager();                if (manager != null)                {                    MyFragment currFrag = (MyFragment) manager.findFragmentById(R.id.fragmentItem);                    currFrag.onFragmentResume();                }                               }        };        return result;    }

MyFragment.onFragmentResume() will be called after a "Back" is pressed. few caveats though:

  1. It assumes you added alltransactions to the backstack (usingFragmentTransaction.addToBackStack())
  2. It will be activated upon each stackchange (you can store other stuff inthe back stack such as animation) soyou might get multiple calls for thesame instance of fragment.


I've changed the suggested solution a little bit. Works better for me like that:

private OnBackStackChangedListener getListener() {    OnBackStackChangedListener result = new OnBackStackChangedListener() {        public void onBackStackChanged() {            FragmentManager manager = getSupportFragmentManager();            if (manager != null) {                int backStackEntryCount = manager.getBackStackEntryCount();                if (backStackEntryCount == 0) {                    finish();                }                Fragment fragment = manager.getFragments()                                           .get(backStackEntryCount - 1);                fragment.onResume();            }        }    };    return result;}


After a popStackBack() you can use the following callback : onHiddenChanged(boolean hidden) within your fragment