Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using ConstraintLayout in creating a fragment

I'm wondering whether it's possible to create a fragment layout using ConstraintLayout or not!? Is it a proper approach? or is there any standard root element for creating a fragment?

like image 285
mhd.saboori Avatar asked May 10 '17 07:05

mhd.saboori


1 Answers

You can use a ConstraintLayout to contain a Fragment. It can also be the base view of a Fragment. However, I usually use a FrameLayout as a holder because most times there is no reason to use a complex layout such as ConstraintLayout.

As you can see, FragmentTransaction.add() does not put restrictions for the containerViewId View.

/**
 * Add a fragment to the activity state.  This fragment may optionally
 * also have its view (if {@link Fragment#onCreateView Fragment.onCreateView}
 * returns non-null) inserted into a container view of the activity.
 *
 * @param containerViewId Optional identifier of the container this fragment is
 * to be placed in.  If 0, it will not be placed in a container.
 * @param fragment The fragment to be added.  This fragment must not already
 * be added to the activity.
 * @param tag Optional tag name for the fragment, to later retrieve the
 * fragment with {@link FragmentManager#findFragmentByTag(String)
 * FragmentManager.findFragmentByTag(String)}.
 *
 * @return Returns the same FragmentTransaction instance.
 */
public abstract FragmentTransaction add(@IdRes int containerViewId, Fragment fragment, String tag);

Similarly Fragment.onCreateView() can return any view:

/**
 * Called to have the fragment instantiate its user interface view.
 * This is optional, and non-graphical fragments can return null (which
 * is the default implementation).  This will be called between
 * {@link #onCreate(Bundle)} and {@link #onActivityCreated(Bundle)}.
 *
 * <p>If you return a View from here, you will later be called in
 * {@link #onDestroyView} when the view is being released.
 *
 * @param inflater The LayoutInflater object that can be used to inflate
 * any views in the fragment,
 * @param container If non-null, this is the parent view that the fragment's
 * UI should be attached to.  The fragment should not add the view itself,
 * but this can be used to generate the LayoutParams of the view.
 * @param savedInstanceState If non-null, this fragment is being re-constructed
 * from a previous saved state as given here.
 *
 * @return Return the View for the fragment's UI, or null.
 */
@Nullable
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState)
like image 156
Doron Yakovlev Golani Avatar answered Oct 29 '22 20:10

Doron Yakovlev Golani