What is the main difference between calling these methods:
fragmentTransaction.addToBackStack(name);
fragmentTransaction.replace(containerViewId, fragment, tag);
fragmentTransaction.add(containerViewId, fragment, tag);
What does it mean to replace an already existing fragment, and adding a fragment to the activity state, and adding an activity to the back stack?
Secondly, with findFragmentByTag()
, does this search for tag added by the add()
/replace()
method or the addToBackStack()
method?
One more important difference between add
and replace
is this:
replace
removes the existing fragment and adds a new fragment. This means when you press back button the fragment that got replaced will be created with its onCreateView
being invoked. Whereas add
retains the existing fragments and adds a new fragment that means existing fragment will be active and they wont be in 'paused' state hence when a back button is pressed onCreateView
is not called for the existing fragment(the fragment which was there before new fragment was added).
In terms of fragment's life cycle events onPause
, onResume
, onCreateView
and other life cycle events will be invoked in case of replace
but they wont be invoked in case of add
.
Edit: One should be careful if she is using some kind of event bus library like Greenrobot's Eventbus and reusing the same fragment to stack the fragment on top of other via add
. In this scenario, even though you follow the best practice and register the event bus in onResume
and unregister in onPause
, event bus would still be active in each instance of the added fragment as add
fragment wont call either of these fragment life cycle methods. As a result event bus listener in each active instance of the fragment would process the same event which may not be what you want.