web-dev-qa-db-ja.com

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

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

153
Kerry

FragmentActivityのセクションで、次のものがあります。

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

Fragmentは、常にActivityに埋め込む必要があります。

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

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

いくつかの詳細:

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

注意すべき点:FragmentManagerLoaderManagerには、FragmentActivityの個別のサポートバージョンがあります。

Fragment(HoneyComb以上)でActivityを使用している場合は、呼び出します

  • getFragmentManager()を取得してAndroid.app.FragmentManagerを取得
  • getLoaderManager()を取得してAndroid.app.LoaderManagerを取得

Fragment(HoneyComb以前)で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はありません。

275
Gunnar Karlsson

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

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

詳細は here をご覧ください

14

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

ターゲット配布がHoneycomb以上である場合は、代わりにActivityから拡張できます。

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

8
j2emanue

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

これらの新しい種類の概念により、コードとレイアウトの部分がより柔軟で保守可能になります。 Googleで検索する場合、多くの例があります。

1