What is the difference between Fragment and FragmentActivity?

android, android-fragmentactivity, android-fragments

Solution

A `Fragment` is a section of an `Activity`, which has:

- its own lifecycle

- receives its own input events

- can be added or removed while the `Activity` is running.

A `Fragment` must always be embedded in an `Activity`.

`Fragments` are not part of the API prior to HoneyComb (3.0). If you want to use `Fragments` in an app targeting a platform version prior to HoneyComb, you need to add the Support Package to your project and use the `FragmentActivity` to hold your `Fragments`. The `FragmentActivity` class has an API for dealing with `Fragments`, whereas the `Activity` class, prior to HoneyComb, doesn't.

If your project is targeting HoneyComb or newer only, you should use `Activity` and not `FragmentActivity` to hold your `Fragments`.

Some details:

Use `android.app.Fragment` with `Activity`. Use `android.support.v4.app.Fragment` with `FragmentActivity`. Don't add the support package `Fragment` to an `Activity` as it will cause an Exception to be thrown.

A thing to be careful with: `FragmentManager` and `LoaderManager` have separate support versions for FragmentActivity:

If you are using a `Fragment` in an `Activity` (HoneyComb and up), call

- `getFragmentManager()` to get `android.app.FragmentManager`

- `getLoaderManager()` to get `android.app.LoaderManager`

if you are using a `Fragment` in a `FragmentActivity` (pre-HoneyComb), call:

- `getSupportFragmentManager()` to get `android.support.v4.app.FragmentManager`.

- `getSupportLoaderManager()` to get `android.support.v4.app.LoaderManager`

so, don't do

//don't do this
myFragmentActivity.getLoaderManager(); 
//instead do this:
myFragmentActivity.getSupportLoaderManager();

or

//don't do this:
android.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager();
//instead do this:
android.support.v4.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager()

Also useful to know is that while a fragment has to be embedded in an `Activity` it doesn't have to be part of the `Activity` layout. It can be used as an invisible worker for the activity, with no UI of its own.

Problem

My question is apart from the obvious inheritance differences, what are the main differences between `Fragment` and `FragmentActivity`? To what scenarios are each class best suited? I'm trying to get an understanding of why both of these classes exist...

Original source