私はiOSから来ているのは簡単で、あなたは単にUIViewControllerを使うのです。しかし、Androidでは、特定のAPIレベルに対応する特定のUIComponentがあるため、状況ははるかに複雑に見えます。私はAndroid用BigNerdRanchを読んでいます(この本は2歳くらいです)。彼らは私のActivity
をホストするためにFragmentActivities
を使うことを勧めています。しかし、私はActivity
は廃止予定だと思いました。
では、APIレベル22(APIレベル15または16の最低限のサポート)では、コンポーネントのホスティングとコンポーネント自体の両方に正確に何を使用すればよいでしょうか。これらすべてに用途はありますか、それとも1つか2つをほぼ排他的に使用する必要がありますか?
活動は廃止予定だと思いました
いいえ.
では、APIレベル22(APIレベル15または16の最低限のサポート)では、コンポーネントのホスティングとコンポーネント自体の両方に正確に何を使用すればよいでしょうか。これらすべてに用途はありますか、それとも1つか2つをほぼ排他的に使用する必要がありますか?
Activity
がベースラインです。すべてのアクティビティは直接的または間接的にActivity
から継承します。
FragmentActivity
は、support-v4
およびsupport-v13
ライブラリにあるフラグメントのバックポートで使用するためのものです。フラグメントのネイティブ実装は、API Level 11で追加されました。これは、提案されているminSdkVersion
値よりも低い値です。 FragmentActivity
を特に考慮する必要がある唯一の理由は、ネストされたフラグメント(別のフラグメントを保持するフラグメント)を使用したい場合です。これはネイティブレベルのフラグメントではAPI Level 17までサポートされていなかったからです。
AppCompatActivity
はappcompat-v7
ライブラリからのものです。主に、これはアクションバーのバックポートを提供します。ネイティブアクションバーはAPIレベル11で追加されたので、そのためにAppCompatActivity
は必要ありません。ただし、現在のバージョンのappcompat-v7
では、アクションバーとさまざまなウィジェットの観点から、Material Design審美的なバックポートも制限されています。この特定のStack Overflow回答の範囲をはるかに超えて、appcompat-v7
を使用することの長所と短所があります。
ActionBarActivity
はappcompat-v7
からのベースアクティビティの古い名前です。さまざまな理由から、彼らは名前を変更したかったのです。あなたが使っているサードパーティのライブラリがActionBarActivity
を主張しない限り、AppCompatActivity
よりActionBarActivity
を選ぶべきです。
15〜16の範囲のminSdkVersion
を考えてみましょう。
バックポートされたマテリアルデザインを見たい場合はAppCompatActivity
を使用してください。
そうでない場合は、ネストしたフラグメントが必要ですが、FragmentActivity
を使用してください。
そうでなければ、Activity
を使用してください。
コメントとしてコメントから追加するだけです。AppCompatActivityはFragmentActivityを拡張するため、FragmentActivityの機能を使用する必要がある人は誰でもAppCompatActivityを使用できます。
Activity
は他のすべてのアクティビティの基底クラスです。廃止予定とは思われません。それらの間の関係は次のとおりです。
Activity
< - FragmentActivity
< - AppCompatActivity
< - ActionBarActivity
'< - 'はここで継承を意味します。 reference によるとActionBarActivity
は推奨されていません。代わりにAppCompatActivity
を使用してください。
したがって、基本的には、AppCompatActivity
を使用することは常に正しい選択です。それらの違いは:
Activity
は基本的なものです。Activity
に基づいて、FragmentActivity
はFragment
を使用する機能を提供します。FragmentActivity
に基づいて、AppCompatActivity
はActionBar
に機能を提供します。AppCompatActivity
を使うこれを書いている時点では(リンクをチェックして、まだ正しいことを確認してください)、 Android Documentation App Barを使用している場合はAppCompatActivity
を使用することをお勧めします。
これは与えられた合理的なものです。
Android 3.0(APIレベル11)以降、デフォルトのテーマを使用するすべてのアクティビティには、アクションバーとしてアプリケーションバーがあります。ただし、Androidのさまざまなリリースにわたって、アプリバーの機能がネイティブのActionBarに徐々に追加されています。結果として、ネイティブのActionBarは、デバイスが使用しているAndroidシステムのバージョンに応じて動作が異なります。対照的に、最新の機能はサポートライブラリのバージョンのツールバーに追加されており、サポートライブラリを使用できるすべてのデバイスで利用できます。
そのため、アクティビティのアプリバーを実装するには、サポートライブラリのToolbarクラスを使用する必要があります。サポートライブラリのツールバーを使用すると、アプリは幅広いデバイスで一貫した動作をすることができます。たとえば、ツールバーウィジェットは、Android 2.1(APIレベル7)以降を実行しているデバイスでのマテリアルデザインエクスペリエンスを提供しますが、デバイスがAndroid 5.0(APIレベル21)以降を実行していない限り、ネイティブアクションバーはマテリアルデザインをサポートしません。
ツールバーを追加するための一般的な方法は次のとおりです。
AppCompatActivity
に拡張させるNoActionBar
が欲しいと宣言します。ToolBar
を追加します。ToolBar
のonCreate
を取得します。詳細については ドキュメントの指示 を参照してください。それらは非常に明確かつ有用です。
最低15のAPIレベルでは、AppCompatActivity
を使用します。したがって、たとえば、MainActivity
は次のようになります。
public class MainActivity extends AppCompatActivity {
....
....
}
AppCompatActivity
を使用するには、Google Support Libraryがダウンロードされていることを確認してください(これは[ツール] - > [Android] - > [SDKマネージャ]で確認できます)。次に、アプリケーションのgradle.buildファイルにgradle依存関係を含めます。
compile 'com.Android.support:appcompat-v7:22:2.0'
このAppCompat
をあなたのメインのActivity
として使うことができ、それはそれからFragmentsや他のアクティビティを起動するために使うことができます(これはあなたが構築しているアプリの種類によって異なります)。
BigNerdRanchの本は良い情報源ですが、ええ、それは時代遅れです。 Androidがどのように機能するかについての一般的な情報を読んでください。ただし、使用する特定のクラスが最新のものになるとは思わないでください。
Activity
クラスは基本クラスです。 (オリジナル)フラグメント管理をサポートします(API 11以降)。その専門ははるかに優れているので、もはやその純粋な使用はお勧めできません。
ActionBarActivity
は、Activityクラスへの置き換えの瞬間に/アプリケーション内でActionBarを扱いやすくしたためです。
AppCompatActivity
は - 新しいやり方でActionBarは推奨されなくなり、代わりにToolbarを使うべきです(現在はActionBarの置き換えです)。 AppCompatActivityはFragmentActivityを継承しているので、Fragmentを処理する必要がある場合は(Fragment Managerを使用して)処理できます。 AppCompatActivityは任意のAPI用で、16歳以上ではありません(誰が言ったのですか?)。 Gradleファイルにcompile 'com.Android.support:appcompat-v7:24:2.0'
を追加することによってそれを使うことができます。私はそれをAPI 10で使っていますが、それは完璧に働きます。
特に古くなった情報源を読んでいる場合は特に混乱が生じます。
基本的なものはActivity
で、これはフラグメントを表示できます。 Androidバージョン> 4の場合は、この組み合わせを使用できます。
しかし、あなたが言及した他のクラスを含むサポートライブラリもあります:FragmentActivity
、ActionBarActivity
そしてAppCompat
。もともとそれらはAndroidのバージョン<4でフラグメントをサポートするために使用されていましたが、実際にはそれらはAndroidの新しいバージョン(例えば材料設計)から機能をバックポートするためにも使用されています。
最新のものはAppCompat
です、他の2つはより古いです。私が使用する戦略は常にAppCompat
を使用することです。その結果、アプリは将来のバージョンのAndroidからのバックポートの場合に備えて準備ができているでしょう。
名前は将来のAndroidのバージョンで変わる可能性があるので(現在最新のものはAppCompatActivity
ですが、いつか変わるかもしれません)、Activity
を拡張したクラスAppCompatActivity
がそれから拡張されるのは良いことだと思います1。明日の場合、彼らは名前をAppCompatActivity2
に変更します。例えば、あなたは一箇所でそれを変更しなければならないでしょう。
Activity
、AppcompactActivity
、ActionBarActivity
などについて話していますか。
拡張している基本クラスについて話す必要があります。最初に、スーパークラスの階層を理解する必要があります。
すべてのことは、これらすべてのクラスのスーパークラスであるContextから始まります。
Contextは、その実装がAndroidシステムによって提供される抽象クラスです。アプリケーション固有のリソースやクラスへのアクセス、アクティビティの起動、インテントのブロードキャストや受信などのアプリケーションレベルの操作の呼び出しを可能にします。
Context
の後にContextWrapper
が続くか拡張されている
ContextWrapperはContextクラスを拡張したクラスで、単にその呼び出しのすべてを別のContextに委任します。元のContextを変更せずに動作を変更するためにサブクラス化することができます。
今度はActivity
に到達します
ActivityはContextThemeWrapperを拡張するクラスです。これはユーザーができることに焦点を絞った単一のものです。ほとんどすべてのアクティビティはユーザとやり取りするので、Activityクラスがあなたのためにウィンドウを作成します。
Belowクラスは拡張が制限されていますが、それらは子孫によって内部的に拡張されており、特定のApiをサポートしています。
SupportActivityは、互換機能を構成するためのBaseクラスであるActivityを拡張したクラスです。
BaseFragmentActivityApi14は、BaseクラスであるSupportActivityを継承したクラスです。制限付きクラスですが、V14の機能をサポートするためにBaseFragmentActivityApi16によって拡張されています。
BaseFragmentActivityApi16は、v16 APIを使用できるようにするための{@code FragmentActivity}の基本クラスであるBaseFragmentActivityApi14を拡張するクラスです。しかしそれはまた制限されたクラスですが、V16の機能をサポートするためにFragmentActivityによって拡張されています。
今FragmentActivty
FragmentActivityはBaseFragmentActivityApi16を拡張するクラスで、サポートベースのFragmentおよびLoader APIを使用したいと考えています。
新しいプラットフォームに組み込まれているフラグメントおよびローダーのサポートとは対照的にこのクラスを使用する場合は、getSupportFragmentManager()
およびgetSupportLoaderManager()
メソッドをそれぞれ使用してこれらの機能にアクセスする必要があります。
ActionBarActivityはサポートライブラリの一部です。サポートライブラリは、古いプラットフォームで新しい機能を提供するために使用されます。たとえば、ActionBarはAPI 11で導入され、デフォルトではActivityの一部です(実際のテーマによって異なります)。対照的に、古いプラットフォームにはActionBarはありません。そのため、サポートライブラリは、ActionBarの機能とUIを提供するActivityの子クラス(ActionBarActivity)を追加します。
2015年ActionBarActivityは、サポートライブラリのリビジョン22.1.0で廃止されました。代わりにAppCompatActivityを使用する必要があります。
AppcompactActivityは、サポートライブラリのアクションバー機能を使用するアクティビティの基本クラスであるFragmentActivityを拡張したクラスです。
アクティビティのためにこのクラスを拡張し、アクティビティのテーマをTheme.AppCompat
または同様のテーマに設定することで、APIレベル7以上で実行するときにActionBarをアクティビティに追加できます。
AppCompatActivity extends FragmentActivity extends BaseFragmentActivityApi16 extends BaseFragmentActivityApi14 extends SupportActivity extends アクティビティ
だから アクティビティ はすべてより速いです& AppCompatActivity は最も優れています。