Android: when / why should I use FrameLayout instead of Fragment?
The detail container is a FrameLayout
because the Fragment
that is displayed will be replaced using FragmentTransaction
's replace()
method.
The first argument to replace()
is the ID of container whose Fragments will be replaced. If the FrameLayout in this example were replaced with a Fragment, then both the WorkStationListFragment
and whatever detail Fragment is currently shown would be replaced by the new Fragment. By encapsulating the Fragment within a FrameLayout, you can replace just the details.
fragment tag: Can be used to immediately load fragment via XML, but cannot be replaced by transaction.replace() method. Can load fragment by name or class property.
FrameLayout tag: Can only load fragment via programmatically and also fragment can be replaced by transaction.replace() method. Can add/replace fragment by FragmentTransction.
FragmentContainerView tag: FragmentContainerView is the child of FrameLayout and most recommended view to load fragment, It supports properties of fragment tag: (name and class) so fragment can be loaded from XML, but unlike fragment tag, a fragment can be replaced by transaction.replace(). As we know it is a child of FrameLayout so supports all the features of FrameLayout, we can add fragment just like we did in the case of FrameLayout.
Also, an animation related issue of FrameLayout is resolved in FragmentCotainerView:
Previously, attempting to customize the enter and exit animations of Fragments caused an issue where the entering Fragment would be underneath the exiting Fragment until it completely exited the screen. This resulted in unpleasant -and erroneous- animations when transitioning between Fragments.
Check this link.