Android 12 Developer Preview is here! Try it out, and give us your feedback!

FragmentContainerView

class FragmentContainerView : FrameLayout
kotlin.Any
   ↳ android.view.View
   ↳ android.view.ViewGroup
   ↳ android.widget.FrameLayout
   ↳ androidx.fragment.app.FragmentContainerView

FragmentContainerView is a customized Layout designed specifically for Fragments. It extends FrameLayout, so it can reliably handle Fragment Transactions, and it also has additional features to coordinate with fragment behavior.

FragmentContainerView should be used as the container for Fragments, commonly set in the xml layout of an activity, e.g.:

<androidx.fragment.app.FragmentContainerView
         xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:app="http://schemas.android.com/apk/res-auto"
         android:id="@+id/fragment_container_view"
         android:layout_width="match_parent"
         android:layout_height="match_parent">
  </androidx.fragment.app.FragmentContainerView>
  

FragmentContainerView can also be used to add a Fragment by using the android:name attribute. FragmentContainerView will perform a one time operation that:

You can optionally include an android:tag which allows you to use FragmentManager#findFragmentByTag(String) to retrieve the added Fragment.

<androidx.fragment.app.FragmentContainerView
         xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:app="http://schemas.android.com/apk/res-auto"
         android:id="@+id/fragment_container_view"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:name="com.example.MyFragment"
         android:tag="my_tag">
  </androidx.fragment.app.FragmentContainerView>
  

FragmentContainerView should not be used as a replacement for other ViewGroups (FrameLayout, LinearLayout, etc) outside of Fragment use cases.

FragmentContainerView will only allow views returned by a Fragment's Fragment#onCreateView(LayoutInflater, ViewGroup, Bundle). Attempting to add any other view will result in an IllegalStateException.

Layout animations and transitions are disabled for FragmentContainerView for APIs above 17. Otherwise, Animations should be done through FragmentTransaction#setCustomAnimations(int, int, int, int). If animateLayoutChanges is set to true or setLayoutTransition(LayoutTransition) is called directly an UnsupportedOperationException will be thrown.

Fragments using exit animations are drawn before all others for FragmentContainerView. This ensures that exiting Fragments do not appear on top of the view.

Summary

Public constructors
<init>(@NonNull context: Context)

<init>(@NonNull context: Context, @Nullable attrs: AttributeSet?)

Do not call this constructor directly.

<init>(@NonNull context: Context, @Nullable attrs: AttributeSet?, defStyleAttr: Int)

Do not call this constructor directly.

Public methods
Unit
addView(@NonNull child: View, index: Int, @Nullable params: LayoutParams?)

FragmentContainerView will only allow views returned by a Fragment's Fragment#onCreateView(LayoutInflater, ViewGroup, Bundle).

Unit
endViewTransition(@NonNull view: View)

WindowInsets

The sys ui flags must be set to enable extending the layout into the window insets.

Unit

Unit
removeView(@NonNull view: View)

Unit
removeViewAt(index: Int)

Unit
removeViewInLayout(@NonNull view: View)

Unit
removeViews(start: Int, count: Int)

Unit
removeViewsInLayout(start: Int, count: Int)

Unit
setLayoutTransition(@Nullable transition: LayoutTransition?)

When called, this method throws a UnsupportedOperationException on APIs above 17.

Unit
startViewTransition(@NonNull view: View)

Protected methods
Boolean
addViewInLayout(@NonNull child: View, index: Int, @Nullable params: LayoutParams?, preventRequestLayout: Boolean)

FragmentContainerView will only allow views returned by a Fragment's Fragment#onCreateView(LayoutInflater, ViewGroup, Bundle).

Unit
dispatchDraw(@NonNull canvas: Canvas)

Boolean
drawChild(@NonNull canvas: Canvas, @NonNull child: View, drawingTime: Long)

Unit