Android load two fragments in one FrameLayout base on button click
Example
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" tools:context=".MainActivity"> <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="left|top" android:orientation="horizontal"> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="loadFragmentOne" android:text="New Button" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="loadFragmentTwo" android:text="New Button" /> </LinearLayout> <FrameLayout android:id="@+id/mainFrame" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="right|top" /> </LinearLayout>
MainActivity.java
package com.example.tutorframelayout; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; import android.view.View; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void loadFragmentOne(View v) { FragmentManager fragmentManager = getSupportFragmentManager(); Fragment fragmentA = fragmentManager.findFragmentByTag("frag1"); if (fragmentA == null) { fragmentA = new FragmentA(); } FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.add(R.id.mainFrame, fragmentA, "frag1"); transaction.commit(); } public void loadFragmentTwo(View v) { // 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 FragmentManager fragmentManager = getSupportFragmentManager(); Fragment fragmentB = fragmentManager.findFragmentByTag("frag2"); if (fragmentB == null) { fragmentB = new FragmentB(); } FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.replace(R.id.mainFrame, fragmentB, "frag2"); transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); //setting animation for fragment transaction transaction.addToBackStack(null); transaction.commit(); } }
FragmentA.java
package com.example.tutorframelayout; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; public class FragmentA extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_a,container,false); } @Override public void onSaveInstanceState(Bundle outState) { //Saving data while orientation changes super.onSaveInstanceState(outState); } }
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="#df00f7ff"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="fragment A" /> </LinearLayout>
FragmentB.java
package com.example.tutorframelayout; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class FragmentB extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_b,container,false); } @Override public void onSaveInstanceState(Bundle outState) { //Saving data while orientation changes super.onSaveInstanceState(outState); } }
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:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="fragment B" /> </LinearLayout>
OutPut