Add and Replace a Fragment to an Activity at Runtime with Example
Two fragments, displayed in different configurations for the same activity on different screen sizes. On a large screen, both fragments fit side by side, but on a handset device, only one fragment fits at a time so the fragments must replace each other as the user navigates.
The
FragmentManager
class provides methods that allow you to add, remove, and replace fragments to an activity at runtime in order to create a dynamic experience.![](https://developer.android.com/images/training/basics/fragments-screen-mock.png)
To perform a transaction such as add or remove a fragment, you must use the
FragmentManager
to create a FragmentTransaction
, which provides APIs to add, remove, replace, and perform other fragment transactions.
If your activity allows the fragments to be removed and replaced, you should add the initial fragment(s) to the activity during the activity's
onCreate()
method.
An important rule when dealing with fragments—especially when adding fragments at runtime—is that your activity layout must include a container
View
in which you can insert the fragment.
res/layout/news_articles.xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="match_parent" />
Replace One Fragment with Another
The procedure to replace a fragment is similar to adding one, but requires the
replace()
method instead of add()
.
example of replacing one fragment with another:
// Create fragment and give it an argument specifying the article it should show ArticleFragment newFragment = new ArticleFragment(); Bundle args = new Bundle(); args.putInt(ArticleFragment.ARG_POSITION, position); newFragment.setArguments(args); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); // Replace whatever is in the fragment_container view with this fragment, // and add the transaction to the back stack so the user can navigate back transaction.replace(R.id.fragment_container, newFragment); transaction.addToBackStack(null); // Commit the transaction transaction.commit();
Comments
Post a Comment