• Menu
  • Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar

JavaBeat

Java Tutorial Blog

  • Java
    • Java 7
    • Java 8
    • Java EE
    • Servlets
  • Spring Framework
    • Spring Tutorials
    • Spring 4 Tutorials
    • Spring Boot
  • JSF Tutorials
  • Most Popular
    • Binary Search Tree Traversal
    • Spring Batch Tutorial
    • AngularJS + Spring MVC
    • Spring Data JPA Tutorial
    • Packaging and Deploying Node.js
  • About Us
    • Join Us (JBC)
  • Java
    • Java 7
    • Java 8
    • Java EE
    • Servlets
  • Spring Framework
    • Spring Tutorials
    • Spring 4 Tutorials
    • Spring Boot
  • JSF Tutorials
  • Most Popular
    • Binary Search Tree Traversal
    • Spring Batch Tutorial
    • AngularJS + Spring MVC
    • Spring Data JPA Tutorial
    • Packaging and Deploying Node.js
  • About Us
    • Join Us (JBC)

Fragments in Android

May 21, 2013 //  by Krishna Srinivasan//  Leave a Comment

Fragments are like sub-activities which are objects that represent parts of an activity’s UI. Fragment is a modular section of an activity, which has its own lifecycle, receives its own input events. Multiple fragments can be combined to form a single activity to build multipane UI and reuse it as a single fragment in multiple activities. Fragment’s lifecycle is directly affected by the host activity’s lifecycle. If the host activity stops, all the fragments in it are stopped and when the host activity is destroyed, all fragments in to are destroyed. Fragments make it easier to adapt an application to different screen orientations and multiple screen sizes.

  • You must always embed a fragment in an activity. They can only exist within the context of an activity.
  • Fragments define their own layout, their own behaviour and their own life cycle.
  • You can insert a fragment into an activity layout by declaring the fragment in the activity’s layout file, as a <fragment> element or You can add and remove fragments dynamically in an activity at runtime.
  • You can use fragments without its own UI as an invisible worker for the activity.
  • Inorder to acheive reusability, Fragment-to-Fragment communication should not be done. That is we should avoid direct manipulation of one fragment from another fragment.

Fragments introduced in Android 3.0( API level 11)

Android introduced fragments in Android 3.0. If you are using Android 3.0 or higher, then you are all set. You have access to the following,

  • Fragment class, which is the base class for all fragment definitions.
    android.app.Fragment
  • FragmentManager- which is the class for interacting with fragment objects inside the host Activity.
    android.app.FragmentManager
  • FragmentTransaction-which is the class for performing fragment transactions like as add, remove, or replace a fragment.
    android.app.FragmentTransaction

Android Compatibility Library(ACL)

Since Fragments were introduced for Android 3.0 and higher, Google has released the Android Compatibility Library(ACL) for Android 1.6 and higher. The ACL gives you access to the fragment system. Since ACL supports Android versions back to Android 1.6, Android 1.5 devices will not be able to use fragment system. If you are trying to build application using ACL on devices with Android 3.0 or higher, your application uses the class definitions from the Compatibility Package but not the device’s native implementation of the class. For more details on ACL, please refer to the Google documentation V4 library. When using compatibility library, you will need to subbclass FragmentActivity for any Activity that wants to make use of Fragment.

Why to use Fragments

Android runs on variety of devices like phones, tablets and large screen TVs. A Tablet has a large screen than does a phone. A TV has a larger screen than does a tablet. Fragments helps us to handle mutiple screen sizes. Lets assume we have an activity that displays a list of jobs(list of jobs) and details of each job if the user taps on any job in the list.
A tablet is more like a desktop, which has larger screen sizes. In this case, you can have the list of emails and the details of the selected email displaying on the same screen.

you can develop two fragment one for managing the list and another for managing the details of the list for this scenario, depending upon the screen size and change in the layout configurations the Fragments would be resued.

As you can see the picture used for tablets, the Activity A contains the Fragment A and Fragment B being displayed on the same screen. Fragment B updates when the selection is done on Fragment A. Whereas in Handsets because of its small size, the Activity A contains Fragment A which has list of emails, selecting an email in activity A, fires up a new activity named Activity B which has Fragment B displaying the details of the seletced email. This is how fragments helps in reusability while using devices of different size.

Fragments can also address the issue of orientation change. During the orientation change, Android re-creates your activity before switching to new orientation, wherein you have to save the current state of the activity and restore the state once the activity has been recreated. Using fragments you can retain a part of the UI which need not be altered, across orientation changes.

Fragment LifeCycle

Subclasses of Fragment class

Below are the subclasses of a Fragmnt Class

  • ListFragment
  • DialogFragment
  • PreferenceFragment
  • WebViewFragment

Creating a Fragment Class

To define a new fragment, you need to extend the Fragment class( android.app.Fragment) or one of the above mentioned subclasses of Fragment class. The below code shows how to define a fragment,

public class FragmentListActivity extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.listlayout, container, false);
}
}

The above code will inflate the view R.layout.listlayout, and add it as a child view to the ViewGroup container. R.layout.listlayout is a simple layout file for your fragment class that you must have created in the path res/layout folder.

To provide a layout for the fragment, you must implement the onCreateview() callback method which returns a view(root of your fragment’s layout). The Android system invokes this method when it is time to put the Fragment on the screen. The arguments passed in to this callback include,

  1. layoutInflater which you can used to inflate a layout for this fragment.
  2. a ViewGroup parent
  3. Saved bundle

Category: Google AndroidTag: Android

About Krishna Srinivasan

He is Founder and Chief Editor of JavaBeat. He has more than 8+ years of experience on developing Web applications. He writes about Spring, DOJO, JSF, Hibernate and many other emerging technologies in this blog.

Previous Post: « What is StrictMode in Android? – Part 2
Next Post: How to create CheckBoxes in Android »

Reader Interactions

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Primary Sidebar

Follow Us

  • Facebook
  • Pinterest

FEATURED TUTORIALS

New Features in Spring Boot 1.4

Difference Between @RequestParam and @PathVariable in Spring MVC

What is new in Java 6.0 Collections API?

The Java 6.0 Compiler API

Introductiion to Jakarta Struts

What’s new in Struts 2.0? – Struts 2.0 Framework

JavaBeat

Copyright © by JavaBeat · All rights reserved
Privacy Policy | Contact