Je viens d'iOS où c'est facile et vous utilisez simplement un UIViewController. Cependant, dans Android, les choses semblent beaucoup plus compliquées, avec certains composants UIC pour certains niveaux d’API. Je lis BigNerdRanch pour Android (le livre date d'environ 2 ans) et ils suggèrent que j'utilise Activity
pour héberger mes FragmentActivities
. Cependant, je pensais que Activity
était obsolète.
Donc, pour l'API de niveau 22 (avec un support minimum pour l'API de niveau 15 ou 16), que dois-je utiliser exactement pour héberger les composants et pour les composants eux-mêmes? Existe-t-il des utilisations pour tout cela, ou devrais-je en utiliser un ou deux presque exclusivement?
Je pensais que l'activité était obsolète
Non.
Donc, pour l'API de niveau 22 (avec un support minimum pour l'API de niveau 15 ou 16), que dois-je utiliser exactement pour héberger les composants et pour les composants eux-mêmes? Existe-t-il des utilisations pour tout cela, ou devrais-je en utiliser un ou deux presque exclusivement?
Activity
est la ligne de base. Chaque activité hérite de Activity
, directement ou indirectement.
FragmentActivity
doit être utilisé avec le backport de fragments trouvés dans les bibliothèques support-v4
et support-v13
. L'implémentation native de fragments a été ajoutée à l'API niveau 11, ce qui est inférieur aux valeurs minSdkVersion
proposées. La seule raison pour laquelle vous auriez besoin de prendre en compte FragmentActivity
spécifiquement est si vous souhaitez utiliser des fragments imbriqués (un fragment contenant un autre fragment), car cela n'était pas pris en charge dans les fragments natifs jusqu'au niveau 17 de l'API.
AppCompatActivity
provient de la bibliothèque appcompat-v7
. Principalement, cela offre un backport de la barre d’action. Étant donné que la barre d’action native a été ajoutée à l’API Niveau 11, vous n’avez pas besoin de AppCompatActivity
pour cela. Cependant, les versions actuelles de appcompat-v7
ajoutent également un backport limité de l'esthétique de Material Design, en termes de barre d'action et de divers widgets. Il existe des avantages et des inconvénients à utiliser appcompat-v7
, bien au-delà de la portée de cette réponse spécifique Stack Overflow.
ActionBarActivity
est l'ancien nom de l'activité de base de appcompat-v7
. Pour diverses raisons, ils ont voulu changer le nom. Sauf si une bibliothèque tierce que vous utilisez insiste sur ActionBarActivity
, vous devriez préférer AppCompatActivity
à ActionBarActivity
.
Donc, étant donné votre minSdkVersion
dans la fourchette 15-16:
Si vous voulez l'apparence de conception de matériau rétroportée, utilisez AppCompatActivity
Sinon, mais si vous voulez des fragments imbriqués, utilisez FragmentActivity
Sinon, utilisez Activity
Il suffit d'ajouter du commentaire en tant que note: AppCompatActivity étend FragmentActivity, de sorte que toute personne devant utiliser les fonctionnalités de FragmentActivity peut utiliser AppCompatActivity.
Activity
est la classe de base de toutes les autres activités, je ne pense pas que ce sera obsolète. La relation entre eux est:
Activity
<- FragmentActivity
<- AppCompatActivity
<- ActionBarActivity
'<-' signifie héritage ici. La référence said ActionBarActivity
est obsolète, utilisez plutôt AppCompatActivity
.
Donc, fondamentalement, utiliser AppCompatActivity
est toujours le bon choix. Les différences entre eux:
Activity
est la base.Activity
, FragmentActivity
permet d'utiliser Fragment
.FragmentActivity
, AppCompatActivity
fournit des fonctionnalités à ActionBar
.AppCompatActivity
Au moment d'écrire ces lignes (vérifiez le lien pour vous assurer qu'il est toujours vrai), la documentation Android recommande d'utiliser AppCompatActivity
si vous utilisez une barre d'applications.
C'est le rationnel donné:
À partir d'Android 3.0 (API niveau 11), toutes les activités utilisant le thème par défaut a un ActionBar comme barre d’application. Cependant, app bar des fonctionnalités ont été progressivement ajoutées à la barre d’action native sur diverses versions Android. Par conséquent, le ActionBar natif se comporte différemment selon la version du système Android, un appareil peut utiliser. En revanche, les fonctionnalités les plus récentes sont ajoutées au fichier version de la barre d’outils de la bibliothèque de support, et ils sont disponibles sur n’importe quel fichier appareil pouvant utiliser la bibliothèque de support.
Pour cette raison, vous devez utiliser la classe Toolbar de la bibliothèque de support pour implémenter les barres d'applications de vos activités. Utilisation de la bibliothèque de support La barre d'outils permet de s'assurer que votre application aura un comportement cohérent sur la plus large gamme de périphériques. Par exemple, le widget Barre d'outils fournit une expérience de conception matérielle sur les appareils fonctionnant sous Android 2.1 (API de niveau 7) ou ultérieure, mais la barre d’action native ne prend pas en charge conception matérielle sauf si le périphérique exécute Android 5.0 (niveau API 21) ou une version ultérieure.
Les instructions générales pour l’ajout d’une barre d’outils sont
AppCompatActivity
NoActionBar
.ToolBar
à la présentation XML de chaque activité.ToolBar
dans la onCreate
de chaque activité.Voir les instructions documentation pour plus de détails. Ils sont assez clairs et utiles.
Pour un niveau minimum de 15 API, vous voudriez utiliser AppCompatActivity
. Ainsi, par exemple, votre MainActivity
ressemblerait à ceci:
public class MainActivity extends AppCompatActivity {
....
....
}
Pour utiliser la AppCompatActivity
, assurez-vous d'avoir téléchargé la bibliothèque de support de Google (vous pouvez le vérifier dans Outils -> Android -> Gestionnaire de SDK). Ensuite, incluez simplement la dépendance de gradle dans le fichier gradle.build de votre application:
compile 'com.Android.support:appcompat-v7:22:2.0'
Vous pouvez utiliser cette AppCompat
comme votre Activity
principale, qui peut ensuite être utilisée pour lancer des fragments ou d'autres activités (cela dépend du type d'application que vous construisez).
Le livre BigNerdRanch est une bonne ressource, mais oui, il est obsolète. Lisez-le pour des informations générales sur le fonctionnement d'Android, mais ne vous attendez pas à ce que les classes spécifiques qu'ils utilisent soient à jour.
Activity
class est la classe de base. (L'original) Il prend en charge la gestion des fragments (depuis l'API 11). N'est plus recommandé son utilisation pure car ses spécialisations sont bien meilleures.
ActionBarActivity
était dans un instant le remplacement de la classe d'activité, car il facilitait la gestion du ActionBar dans une application.
AppCompatActivity
est le nouveau chemin à parcourir car la barre d’action n’est plus encouragée et vous devez utiliser Toolbar à la place (c'est actuellement le remplacement du ActionBar). AppCompatActivity hérite de FragmentActivity donc si vous devez gérer des fragments, vous pouvez (via le gestionnaire de fragments). AppCompatActivity est destiné à N'IMPORTE QUELLE API, pas seulement à 16 ans et plus (qui a dit cela?). Vous pouvez l'utiliser en ajoutant compile 'com.Android.support:appcompat-v7:24:2.0'
dans votre fichier Gradle. Je l'utilise dans API 10 et cela fonctionne parfaitement.
Il y a beaucoup de confusion ici, surtout si vous lisez des sources périmées.
La base est Activity
, qui peut montrer des fragments. Vous pouvez utiliser cette combinaison si vous utilisez la version Android> 4.
Cependant, il existe également une bibliothèque de support englobant les autres classes que vous avez mentionnées: FragmentActivity
, ActionBarActivity
et AppCompat
. À l'origine, ils étaient utilisés pour prendre en charge des fragments sur les versions d'Android <4, mais en réalité, ils étaient également utilisés pour reporter les fonctionnalités de versions plus récentes d'Android (conception matérielle par exemple).
Le dernier en date est AppCompat
, les 2 autres sont plus anciens. La stratégie que j'utilise est de toujours utiliser AppCompat
, de sorte que l'application soit prête en cas de backport des futures versions d'Android.
Comme le nom changera probablement dans les futures versions d’Android (le dernier en date étant AppCompatActivity
mais il le sera probablement à un moment donné), je pense qu’il est bon d’avoir une classe Activity
qui étend AppCompatActivity
, puis toutes vos activités s’étendent de ce un. Si demain, ils changent le nom en AppCompatActivity2
par exemple, vous devrez le changer juste à un endroit.
Si vous parlez de Activity
, AppcompactActivity
, ActionBarActivity
etc etc ..
Nous devons parler des classes de base qu’elles étendent. Nous devons d’abord comprendre la hiérarchie des super classes.
Toutes les choses sont démarrées à partir de Context qui est une super classe pour toutes ces classes.
Context est une classe abstraite dont l'implémentation est fournie par le Système Android. Il permet d'accéder aux ressources spécifiques à l'application et aux fichiers classes, ainsi que des appels ascendants pour des opérations au niveau de l'application telles que activités de lancement, diffusion et réception, etc.
Context
est suivi ou prolongé par ContextWrapper
ContextWrapper est une classe qui étend la classe Context simplement délègue tous ses appels à un autre contexte. Peut être sous-classé à modifier le comportement sans changer le contexte d'origine.
Maintenant nous atteignons Activity
Activity est une classe qui étend ContextThemeWrapper qui est un chose unique et ciblée que l’utilisateur peut faire. Presque toutes les activités interagir avec l'utilisateur, la classe d'activité se charge donc de créer un fenêtre pour toi
Below Les classes sont limitées à l'extension, mais elles sont étendues par leur descendant en interne et prennent en charge des Api spécifiques.
SupportActivity est une classe qui étend Activity, qui est une classe de base permettant de composer des fonctionnalités de compatibilité.
BaseFragmentActivityApi14 est une classe qui étend SupportActivity c'est une classe de base C'est une classe restreinte mais elle est étendue par BaseFragmentActivityApi16 pour prendre en charge la fonctionnalité de V14
Le BaseFragmentActivityApi16 est une classe qui étend BaseFragmentActivityApi14 qui est une classe de base pour {@code FragmentActivity} pour pouvoir utiliser v16 API. Mais c’est aussi classe restreinte mais elle est étendue par FragmentActivity pour prendre en charge le fichier fonctionnalité de V16.
maintenant FragmentActivty
FragmentActivity est une classe qui étend BaseFragmentActivityApi16 et qui souhaite utiliser le support API Fragment et Loader.
Lorsque vous utilisez cette classe par opposition au support intégré du chargeur et du fragment de la nouvelle plate-forme, vous devez utiliser respectivement les méthodes getSupportFragmentManager()
et getSupportLoaderManager()
pour accéder à ces fonctionnalités.
ActionBarActivity fait partie de la bibliothèque de support. Les bibliothèques de support sont utilisées pour fournir de nouvelles fonctionnalités sur les anciennes plates-formes. Pour Par exemple, le ActionBar a été introduit dans l'API 11 et fait partie du Activité par défaut (selon le thème choisi). En revanche il n'y a pas ActionBar sur les anciennes plates-formes. Donc le support La bibliothèque ajoute une classe enfant d’Activity (ActionBarActivity) qui fournit la fonctionnalité ActionBar et l'interface utilisateur
En 2015, ActionBarActivity est obsolète dans la révision 22.1.0 de la bibliothèque de support. AppCompatActivity doit être utilisé à la place.
AppcompactActivity est une classe qui étend FragmentActivity, c'est-à-dire la classe de base pour les activités qui utilisent les fonctionnalités de la barre d'actions de la bibliothèque de support.
Vous pouvez ajouter un ActionBar à votre activité lorsque vous utilisez une API de niveau 7 ou supérieur en étendant cette classe pour votre activité et en définissant le thème de l'activité sur Theme.AppCompat
ou un thème similaire.
AppCompatActivity étend FragmentActivity s'étend BaseFragmentActivityApi16 étend BaseFragmentActivityApi14 étend SupportActivity étend Activité
Donc, Activity est plus rapide que tout & AppCompatActivity est le meilleur de tous.