web-dev-qa-db-ja.com

フラグメントまたはサポートフラグメント?

Android> = 4.0をサポートするアプリを開発しています。 Android.appパッケージのフラグメントを使用します。 this one のような4.0の古いフラグメント実装の問題に直面しているので、サポートライブラリで既に修正されているので、サポートライブラリからフラグメント実装に切り替えて、信頼性と一貫性のある実装。

これについてあなたはどう思いますか? Android 4向けに開発する場合、サポートライブラリのフラグメントは既に使用可能ですが、使用していますか?

125
brillenheini

私の経験から、すべてのAndroidデバイスで同じフラグメント実装を使用することは大きな利点です。ネイティブフラグメントを使用してAndroid 4.0に状態が保存され、サポートライブラリがすべてなくなった場合、すべてのNullPointerExceptionsを取り除くことができませんでした。また、これまでのところ、このアプローチには欠点はありませんでした。

私自身の質問に対する私の答えは次のとおりです。Android 4.x向けに開発する場合、サポートライブラリのフラグメントを使用することをお勧めします。サポートライブラリにはバグが修正されていますが、古いフラグメントの実装にはまだ存在しており、より多くのバグ修正で頻繁に更新されます。

90
brillenheini

しばらくSupportFragmentを使用する大きな理由の1つは、API 17までChildFragmentManagerにアクセスできないことです。サポートライブラリは、子フラグメントマネージャーのサポートバージョンを提供します。

他のフラグメントを含むフラグメントがある場合、これは大きな問題になります。これは、かなり複雑なタブレットアプリケーションで一般的であるか、全体的なアーキテクチャがタブ付きレイアウトに基づいているか、ナビゲーションドロワーを使用しています。

40
Ross Hambrick

Android 4.0+をターゲットにしているにもかかわらず、サポートライブラリを含める必要があることにも不満を感じていましたが、正式に推奨されているようです。

Android Support Libraryパッケージには、アプリケーションに含めることができるいくつかのライブラリが含まれています。これらの各ライブラリは、特定の範囲のAndroidプラットフォームバージョンと機能セットをサポートしています。

このガイドでは、サポートライブラリが提供する重要な機能とバージョンサポートについて説明し、アプリケーションに含める必要がある機能を決定するのに役立ちます。 一般に、v4サポートとv7 appcompatライブラリを含めることをお勧めします。これらは幅広いAndroidバージョンをサポートし、推奨されるユーザーインターフェイスパターンのAPIを提供するためです。

http://developer.Android.com/tools/support-library/features.html

21
sourabhj

私見4.0のみの開発を計画している場合、実行可能ファイルは小さくなるので、ネイティブライブラリを使用することをお勧めします。初期のバージョンでバグの問題に遭遇する可能性があるのは事実ですが、これらのほとんどは回避するのにかなり簡単なはずです。また、互換性ライブラリは、4.0以降で実行している場合に備えて、ネイティブフラグメントにマップすることになっています。したがって、とにかくこの種の問題に苦労しなければならないかもしれません。サポートライブラリの問題は、多くのクラスが2倍(サポートパッケージ構造に一度、「ネイティブ」パッケージ構造に一度)表示されるため、開発が少し面倒になることです。

ただし、4.0より前のアプリもリリースする場合は、サポートライブラリを回避する方法はありません。また、2.3ではすべてのユーザーの約38%がいるため、このOSバージョンを含めることはビジネス上理にかなっているかもしれません。このような場合、サポートライブラリをJake Wartons ActionBarSherlockと組み合わせて使用​​できます(または、Googleが最終的にリリースされたらActionBarライブラリをサポートします)。

4
RaB

ここでステートメントを見たので、今すぐサポートライブラリを使用する方が良いようです https://developer.Android.com/reference/Android/app/Fragment.html

このクラスはAPIレベルPで廃止されました。すべてのデバイスで一貫した動作とライフサイクルへのアクセスのためにサポートライブラリフラグメントを使用します。

2
code4j