162

私の質問は明らかな継承の違いとは別に、との主な違いは何FragmentですかFragmentActivity?各クラスはどのシナリオに最も適していますか?これらのクラスの両方が存在する理由を理解しようとしています...

4

4 に答える 4

285

AFragmentは、のセクションでありActivity、次のようになります。

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

Fragmentは常にに埋め込まれている必要がありますActivity

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

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

いくつかの詳細:

と一緒に使用android.app.FragmentActivityます。と一緒に使用android.support.v4.app.FragmentFragmentActivityます。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がなくても、アクティビティの非表示のワーカーとして使用できます。

于 2012-05-15T22:42:48.240 に答える
14

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

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

詳細はこちらをご覧ください

于 2012-05-15T21:56:56.273 に答える
8

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

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

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

于 2013-02-15T19:30:43.707 に答える
1

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

これらの新しい種類の概念により、コードとレイアウトの断片がより柔軟で保守しやすくなります。あなたがグーグルで検索するならば、多くの例があります。

于 2012-05-15T22:09:38.960 に答える