To make a fragment we have to:
1) Extend the fragment class
2) Give the appearance in XML or Java
3) Override the onCreateView() method to link appearance
4) Use the fragment in XML or Java
1) Activity onCreate() called, where activity can set its view using the setContentView() method.
2) Fragment has it’s onAttach() method called after the fragment is associated with its activity. It gets a reference to the activity object which can be used as context.
3) onAttachFragment() is called by activity to notify the activity that a fragment was attached recently.
4) onCreate() is called inside the fragment
What is the difference between onCreate() in the activity, and onCreate() in the fragment?
5) onCreateView() method called in the fragment – this is where you link the layout file of the fragment to its object
6) onActivityCreated() is called AFTER the activities onCreate() method is completed. So here you can access UI elements through this method.
7) onStart() is called in the activity
8) onStart() is called in the fragment
9) onResume() is called in the activity
10) onResume() is called in the fragment
In the blue box, this represents the methods that are called for each fragment. For every fragment 3,4,5 are called and finally 6.
when a fragment is about to be destroyed

onSaveInstanceState() is used to save information about the fragment/activity in the Bundle object
onDestroyView() is called after the fragment view hierarchy is no longer accessible
onDestroy() is called after the fragment is not used, it still exists as a java object attached to the activity
onDetach() – fragment is not tied to the activity, and does not have a view hierarchy
Demo of fragment lifecycle with code
MainActivity.java
package com.jamesfroggatt.fragments1.app;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
MyFragment.java
package com.jamesfroggatt.fragments1.app;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class MyFragment extends Fragment{
@Override
public void onAttach(Activity activity) {
Log.i("Fragment ","onAttach");
super.onAttach(activity);
}
@Override
public void onCreate(Bundle savedInstanceState) {
Log.i("Fragment ","onCreate");
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.i("Fragment ","onCreateView");
// return super.onCreateView(R.layout.james_fragment_layout, container, false);
return inflater.inflate(R.layout.james_fragment_layout, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
Log.i("Fragment ","onActivityCreated");
super.onActivityCreated(savedInstanceState);
}
@Override
public void onStart() {
Log.i("Fragment ","onStart");
super.onStart();
}
@Override
public void onResume() {
Log.i("Fragment ","onResume");
super.onResume();
}
@Override
public void onPause() {
Log.i("Fragment ","onPause");
super.onPause();
}
@Override
public void onSaveInstanceState(Bundle outState) {
Log.i("Fragment ","onSaveInstanceState");
super.onSaveInstanceState(outState);
}
@Override
public void onStop() {
Log.i("Fragment ","onStop");
super.onStop();
}
@Override
public void onDestroyView() {
Log.i("Fragment ","onDestroyView");
super.onDestroyView();
}
@Override
public void onDestroy() {
Log.i("Fragment ","onDestroy");
super.onDestroy();
}
@Override
public void onDetach() {
Log.i("Fragment ","onDetach");
super.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"
android:background="#ffcc0044"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.jamesfroggatt.fragments1.app.MainActivity">
<TextView
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<fragment
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:name="com.jamesfroggatt.fragments1.app.MyFragment"
tools:layout="@layout/james_fragment_layout" />
</RelativeLayout>
james_fragment_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="100dp"
android:background="#ffccc320"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ff30cc4e"
android:paddingLeft="50dp"
android:text="This is MyFragment"/>
</LinearLayout>
Demo of fragment lifecycle and activity lifecycle with code
MainActivity.java
package com.jamesfroggatt.fragments1.app;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("Activity ","onCreate");
setContentView(R.layout.activity_main);
}
@Override
protected void onStop() {
super.onStop();
Log.e("Activity ","onStop");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.e("Activity ","onRestoreInstanceState");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e("Activity ","onDestroy");
}
@Override
protected void onPause() {
super.onPause();
Log.e("Activity ","onPause");
}
@Override
protected void onResume() {
super.onResume();
Log.e("Activity ","onResume");
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.e("Activity ","onSaveInstanceState");
}
@Override
protected void onStart() {
super.onStart();
Log.e("Activity ","onStart");
}
@Override
protected void onRestart() {
super.onRestart();
Log.e("Activity ","onRestart");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
MyFragment.java
package com.jamesfroggatt.fragments1.app;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class MyFragment extends Fragment{
@Override
public void onAttach(Activity activity) {
Log.i("Fragment ","onAttach");
super.onAttach(activity);
}
@Override
public void onCreate(Bundle savedInstanceState) {
Log.i("Fragment ","onCreate");
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.i("Fragment ","onCreateView");
// return super.onCreateView(R.layout.james_fragment_layout, container, false);
return inflater.inflate(R.layout.james_fragment_layout, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
Log.i("Fragment ","onActivityCreated");
super.onActivityCreated(savedInstanceState);
}
@Override
public void onStart() {
Log.i("Fragment ","onStart");
super.onStart();
}
@Override
public void onResume() {
Log.i("Fragment ","onResume");
super.onResume();
}
@Override
public void onPause() {
Log.i("Fragment ","onPause");
super.onPause();
}
@Override
public void onSaveInstanceState(Bundle outState) {
Log.i("Fragment ","onSaveInstanceState");
super.onSaveInstanceState(outState);
}
@Override
public void onStop() {
Log.i("Fragment ","onStop");
super.onStop();
}
@Override
public void onDestroyView() {
Log.i("Fragment ","onDestroyView");
super.onDestroyView();
}
@Override
public void onDestroy() {
Log.i("Fragment ","onDestroy");
super.onDestroy();
}
@Override
public void onDetach() {
Log.i("Fragment ","onDetach");
super.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"
android:background="#ffcc0044"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.jamesfroggatt.fragments1.app.MainActivity">
<TextView
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<fragment
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:name="com.jamesfroggatt.fragments1.app.MyFragment"
tools:layout="@layout/james_fragment_layout" />
</RelativeLayout>
james_fragment_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="100dp"
android:background="#ffccc320"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ff30cc4e"
android:paddingLeft="50dp"
android:text="This is MyFragment"/>
</LinearLayout>
