FragmentとFragmentActivityの違いは何ですか?


回答:


280

A FragmentはのセクションですActivity

  • 独自のライフサイクル
  • 独自の入力イベントを受け取ります
  • Activity実行中に追加または削除できます。

AはFragment常にに埋め込まれなければなりませんActivity

FragmentsHoneyComb(3.0)より前のAPIの一部ではありません。FragmentsHoneyCombより前のプラットフォームバージョンを対象とするアプリで使用する場合は、サポートパッケージをプロジェクトに追加し、を使用してFragmentActivityを保持する必要がありますFragmentsFragmentActivityクラスは、に対処するためのAPIを持っているFragmentsのに対し、Activityクラス、ハニカムに先立って、しません。

プロジェクトがHoneyComb以降のみを対象にしている場合は、を保持するのActivityではなく、を使用する必要がありFragmentActivityますFragments

いくつかの詳細:

で使用android.app.FragmentActivityます。で使用android.support.v4.app.FragmentFragmentActivityます。サポートパッケージFragmentをに追加しないでください。追加Activityすると、例外がスローされます。

注意すること:FragmentManagerそしてLoaderManagerFragmentActivityの個別のサポートバージョンを持っている:

(HoneyComb以上)でa Fragmentを使用している場合はActivity

  • getFragmentManager() 取得するため android.app.FragmentManager
  • getLoaderManager() 取得するため android.app.LoaderManager

(pre-HoneyComb)Fragmentでa を使用している場合はFragmentActivity、次を呼び出します。

  • getSupportFragmentManager()取得するandroid.support.v4.app.FragmentManager
  • getSupportLoaderManager() 取得するため android.support.v4.app.LoaderManager

だから、しないでください

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

または

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

フラグメントを埋め込む必要がある一方Activityで、Activityレイアウトの一部である必要がないことも知っておくと便利です。独自のUIがないため、アクティビティの非表示のワーカーとして使用できます。


6
ただし、フラグメントはアクティビティレイアウトの一部である必要はありません。アクティビティの非表示のワーカーとして、独自のUIのない​​フラグメントを使用することもできます。
uzay95

1
@ uzay95これを指摘してくれてありがとう。それを言及するために最後にセクションを追加しました。
Gunnar Karlsson 2013年

@GunnarKarlsson fragmentActivityにフラグメントを追加しませんか?
ダスニーム2013年

2
@Dhasneemアプリを3.0より前のAndroidバージョンで動作させる場合は、FragmentActivityにFragmentを追加します。それ以外の場合は、アクティビティにフラグメントを追加します。
Gunnar Karlsson 2013年

2
ありがとう!これは私の問題を解決します!これで、(Activityで作成された)アプリがFacebookのログインボタンを追加した後、onCreateで常にクラッシュする理由がわかりました(例ではandroid.support.v4.app.Fragmentを使用しています)もちろん、クラッシュには他の理由もあります。しかし、あなたの答えはそれらをまとめるための最後のピースです。
Chlind 2014年

14

FragmentActivityは、フラグメントをサポートする従来のアクティビティであり、それ以上のものはありません。したがって、FragmentActivityは、FragmentがActivityにアタッチされるときに必要です。

Well Fragmentは、Activityの基本的な動作をコピーする優れたコンポーネントですが、Activityのようなスタンドアロンのアプリケーションコンポーネントではなく、動作するためにActivityにアタッチする必要があります。

見て、ここで詳細は、


1
ところで、API 11より古いデバイスで動作することを希望するアプリにのみ適用される古い回答、
ToolmakerSteve

@ToolmakerSteveで詳細を提供できますか?可能であれば、回答を最新バージョンで編集できますか?
グーカンバリスアーカー

8

FragmentActivityは、Fragmentsをサポートできる通常のActivityクラスと考えてください。ハニカムの前は、アクティビティクラスはフラグメントを直接サポートできなかったため、フラグメントを使用するアクティビティで必要です。

ターゲットのディストリビューションがHoneycomb以降の場合は、代わりにActivityから拡張できます。

また、フラグメントは「サブアクティビティ」と見なされます。活動なしでは存在できません。フラグメントは常にサブアクティビティと考えてください。したがって、アクティビティは親であり、フラグメントは子のようなシンボリックな関係になります。


1

FragmentActivityはFragmentを含むアドホックアクティビティです。これらのいくつかの言葉で、Android 3.0(HoneyComb)でAndroidチームがAndroid SDKに挿入した主な重要な変更の1つを説明しました。

これらの新しい種類のコンセプトを使用すると、コードとレイアウトの部分がより柔軟で保守しやすくなります。グーグルで検索すると、たくさんの例があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.