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


125

Android 4.0以上をサポートするアプリを開発しています。android.appパッケージのフラグメントを使用します。私は4.0の古いフラグメントの実装に問題が直面していますと、同様にこのいずれか、すでにサポートライブラリに固定されて、私はより信頼性と一貫性のある実装を取得するためのサポートライブラリからバックフラグメント実装への切り替え検討しています。

これについてどう思いますか?Android 4向けに開発する際に、サポートライブラリのフラグメントがすでに利用可能であっても、それらを使用していますか?


2
これはいい質問です(+1すると気になります)。また、これについてウェブ上で良い説明はありません。私はアプリのサポートライブラリを使用していますが、コンパイル中またはテスト中にエラーに気付かなかったので、私は間違っているのかどうか疑問に思います。
JJ86 2013年

2
@animuson brillenheiniの回答は、これが主に意見に基づく回答ではないことを証明しています。
OneWorld 2014年

回答:


90

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

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


11
では、android.app.Fragment当時の目的は何でしょうか。あなたはあなたの答えにこれを追加することができた場合は、ここでもう少し説明して、私は完全に満足するでしょう。ありがとう!
jonstaff 2013

1
@jonstaffその理由はおそらく歴史的なものです。そこで私の最新の答えを見てください。
brillenheini 2013

11
完全を期すために、フラグメントのサポートでは実行できないことがあるように見えます(たとえば、実際のターゲットOSがサポートしている場合でも、でアニメーション化されobjectAnimatorています)。これは、を使用している場合ViewPager、v13サポートライブラリのアダプターを使用する必要があることを意味します。それ以外の場合、ビューページャーとフリッピングアニメーションの両方を使用することはできません。
GSerg 2014

5
また、2014年8月の時点で、v13ライブラリはネストされたフラグメントを実行できません。
Martin Marconcini、2014

1
グーグルの人たちはなぜioschedアプリgithub.com/google/iosched/blob/master/android/src/main/java/com/…に v13ライブラリを使用することを選んだのです、彼らには何らかの理由が必要です
forcewill

40

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

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


21

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

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

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

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


@brillenheiniが自分で回答を提供したという事実にもかかわらず、これは受け入れられた回答であるはずです。それは質問に最高の正確さと簡潔さで答えます。
Arvindh Mani 2016

4

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

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


3
ご回答有難うございます。ViewPagerが必要なので、とにかくサポートライブラリを含める必要があります。また、サポートフラグメントは、可能な場合はネイティブ実装に切り替えようとしません。それはドキュメントが言うことです。
brillenheini 2013年

ええ、問題は(@brillenheiniが言ったように)ViewPagerを使用するにはv4が必要であるため、v13以上のデバイスのみをターゲットにしている場合でも、とにかくv4を使用している可能性があります。
ソッティ2015年

私はちょうど私のAPI 21とアプリで(ViewPagerにはv4が必要です)も発見しました。Meh:-/
mraviator 2015年

2

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.