私の質問は明らかな継承の違いとは別に、との主な違いは何Fragment
ですかFragmentActivity
?各クラスはどのシナリオに最も適していますか?これらのクラスの両方が存在する理由を理解しようとしています...
4 に答える
AFragment
は、のセクションでありActivity
、次のようになります。
- 独自のライフサイクル
- 独自の入力イベントを受け取ります
- の実行中に追加または削除できます
Activity
。
Fragment
は常にに埋め込まれている必要がありますActivity
。
Fragments
HoneyComb(3.0)より前のAPIの一部ではありません。Fragments
HoneyCombより前のプラットフォームバージョンを対象とするアプリで使用する場合は、プロジェクトにサポートパッケージFragmentActivity
を追加し、を使用してを保持する必要がありますFragments
。このFragmentActivity
クラスには、を処理するためのAPIがありますが、 HoneyCombより前Fragments
のActivity
クラスにはありません。
プロジェクトがHoneyComb以降のみを対象としている場合は、を保持するのActivity
ではなく、を使用する必要があります。FragmentActivity
Fragments
いくつかの詳細:
と一緒に使用android.app.Fragment
しActivity
ます。と一緒に使用android.support.v4.app.Fragment
しFragmentActivity
ます。Fragment
サポートパッケージをに追加しないでくださいActivity
。例外がスローされます。
注意すべき点:FragmentActivityの個別のサポートバージョンがFragmentManager
あります:LoaderManager
(HoneyComb以上)でを使用Fragment
している場合は、Activity
getFragmentManager()
取得するためandroid.app.FragmentManager
getLoaderManager()
取得するためandroid.app.LoaderManager
(HoneyComb以前)でを使用している場合は、次のように呼び出しFragment
ます。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がなくても、アクティビティの非表示のワーカーとして使用できます。
FragmentActivityは、フラグメントをサポートする従来のアクティビティであり、それ以上のものではありません。したがって、フラグメントがアクティビティにアタッチされる場合は、FragmentActivityが必要です。
Well Fragmentは、Activityの基本的な動作をコピーする優れたコンポーネントですが、Activityのようなスタンドアロンのアプリケーションコンポーネントではなく、動作するにはActivityにアタッチする必要があります。
詳細はこちらをご覧ください
FragmentActivityは、Fragmentsをサポートできる通常のActivityクラスと考えてください。ハニカムの前は、アクティビティクラスはフラグメントを直接サポートできなかったため、フラグメントを使用するアクティビティでこれが必要になります。
ターゲットディストリビューションがHoneycomb以降の場合は、代わりにActivityを拡張できます。
また、フラグメントは「サブアクティビティ」と見なされます。活動なしでは存在できません。フラグメントは常にサブアクティビティと考えてください。したがって、アクティビティは親であり、フラグメントは子のような象徴的な関係になります。
FragmentActivityは、Fragmentを含むアドホックアクティビティです。これらのいくつかの言葉で、Android 3.0(HoneyComb)で、AndroidチームがAndroidSDKに挿入した主な重要な変更の1つを説明しました。
これらの新しい種類の概念により、コードとレイアウトの断片がより柔軟で保守しやすくなります。あなたがグーグルで検索するならば、多くの例があります。