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