MainActivity.java
package com.jamesfroggatt.fragmenttransactiondemo.app; import android.app.Activity; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.os.Bundle; import android.view.View; import android.widget.Toast; public class MainActivity extends Activity { FragmentManager manager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); manager=getFragmentManager(); } public void addA(View v){ // create object of the fragment FragmentA f1 = new FragmentA(); // reference to our fragment manager FragmentTransaction transaction=manager.beginTransaction(); transaction.add(R.id.group,f1,"A"); transaction.commit(); } public void addB(View v){ // create object of the fragment FragmentB f2 = new FragmentB(); // reference to our fragment manager FragmentTransaction transaction=manager.beginTransaction(); transaction.add(R.id.group,f2,"B"); transaction.commit(); } public void removeA(View v){ // we can only remove A if it's there so we have to find fragment A FragmentA f1= (FragmentA) manager.findFragmentByTag("A"); FragmentTransaction transaction=manager.beginTransaction(); // we need to check if it's there or not before doing the transaction // so we don't crash the app if it's not there if (f1!=null) { transaction.remove(f1); transaction.commit(); } else { Toast.makeText(this,"Fragment A was not added before",Toast.LENGTH_SHORT).show(); } } public void removeB(View v){ // we can only remove A if it's there so we have to find fragment A FragmentB f2= (FragmentB) manager.findFragmentByTag("B"); FragmentTransaction transaction=manager.beginTransaction(); // we need to check if it's there or not before doing the transaction // so we don't crash the app if it's not there if (f2!=null) { transaction.remove(f2); transaction.commit(); } else { Toast.makeText(this,"Fragment B was not added before",Toast.LENGTH_SHORT).show(); } } public void replaceAwithB(View v){ FragmentB f2= new FragmentB(); FragmentTransaction transaction=manager.beginTransaction(); transaction.replace(R.id.group,f2,"B"); transaction.commit(); } public void replaceBwithA(View v){ FragmentA f1= new FragmentA(); FragmentTransaction transaction=manager.beginTransaction(); transaction.replace(R.id.group,f1,"A"); transaction.commit(); } public void attachA(View v){ FragmentA f1= (FragmentA) manager.findFragmentByTag("A"); FragmentTransaction transaction=manager.beginTransaction(); if (f1!=null) { transaction.attach(f1); transaction.commit(); } } public void detachA(View v){ FragmentA f1= (FragmentA) manager.findFragmentByTag("A"); FragmentTransaction transaction=manager.beginTransaction(); if (f1!=null) { // detach just HIDES the fragment, it doesn't destroy it completely // only onPause(), onStop(), onDestroy() are called transaction.detach(f1); transaction.commit(); } } }
FragmentA.java
package com.jamesfroggatt.fragmenttransactiondemo.app; import android.app.Activity; import android.app.Fragment; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class FragmentA extends Fragment { @Override public void onAttach(Activity activity) { Log.d("James","Fragment A onAttach"); super.onAttach(activity); } @Override public void onCreate(Bundle savedInstanceState) { Log.d("James","Fragment A onCreate"); super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_a, container, false); Log.d("James","Fragment A onCreateView"); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log.d("James","Fragment A onActivityCreated"); } @Override public void onPause() { super.onPause(); Log.d("James","Fragment A onPause"); } @Override public void onStop() { super.onStop(); Log.d("James","Fragment A onStop"); } @Override public void onResume() { super.onResume(); Log.d("James","Fragment A onResume"); } @Override public void onDestroyView() { super.onDestroyView(); Log.d("James","Fragment A onDestroyView"); } @Override public void onDestroy() { super.onDestroy(); Log.d("James","Fragment A onDestroy"); } @Override public void onDetach() { super.onDetach(); Log.d("James","Fragment A onDetach"); } }
FragmentB.java
package com.jamesfroggatt.fragmenttransactiondemo.app; import android.app.Activity; import android.app.Fragment; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class FragmentB extends Fragment { @Override public void onAttach(Activity activity) { Log.d("James", "Fragment B onAttach"); super.onAttach(activity); } @Override public void onCreate(Bundle savedInstanceState) { Log.d("James","Fragment B onCreate"); super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_b, container, false); Log.d("James","Fragment B onCreateView"); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log.d("James","Fragment B onActivityCreated"); } @Override public void onPause() { super.onPause(); Log.d("James","Fragment B onPause"); } @Override public void onStop() { super.onStop(); Log.d("James","Fragment B onStop"); } @Override public void onResume() { super.onResume(); Log.d("James","Fragment B onResume"); } @Override public void onDestroyView() { super.onDestroyView(); Log.d("James","Fragment B onDestroyView"); } @Override public void onDestroy() { super.onDestroy(); Log.d("James","Fragment B onDestroy"); } @Override public void onDetach() { super.onDetach(); Log.d("James","Fragment B onDetach"); } }
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="${packageName}.${activityClass}"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="AddA" android:onClick="addA" android:id="@+id/button" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="RemoveA" android:onClick="removeA" android:id="@+id/button2" android:layout_alignParentTop="true" android:layout_toRightOf="@+id/button" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="ReplaceAwithB" android:onClick="replaceAwithB" android:id="@+id/button3" android:layout_alignParentTop="true" android:layout_toRightOf="@+id/button2" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="AddB" android:onClick="addB" android:id="@+id/button4" android:layout_below="@+id/button" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="RemoveB" android:onClick="removeB" android:id="@+id/button5" android:layout_alignTop="@+id/button4" android:layout_toRightOf="@+id/button4" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="ReplaceBwithA" android:onClick="replaceBwithA" android:id="@+id/button6" android:layout_alignTop="@+id/button5" android:layout_toRightOf="@+id/button5" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="AttachA" android:onClick="attachA" android:id="@+id/button7" android:layout_below="@+id/button4" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="DetachA" android:onClick="detachA" android:id="@+id/button8" android:layout_alignTop="@+id/button7" android:layout_toRightOf="@+id/button7" /> <!-- fragments will be put in this linear layout below --> <!-- the linear layout will be the CONTAINER for the fragments --> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@+id/button7" android:id="@+id/group" android:layout_alignParentLeft="true" android:layout_alignParentStart="true"> </LinearLayout> </RelativeLayout>
fragment_a.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#AA66DD"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFF" android:text="This is FRAGMENT A" android:id="@+id/textView1" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" /> </LinearLayout>
fragment_b.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFBB00"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#000" android:text="This is FRAGMENT B" android:id="@+id/textView2" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" /> </LinearLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.jamesfroggatt.fragmenttransactiondemo.app" > <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.jamesfroggatt.fragmenttransactiondemo.app.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Output:
Example above is from: