Table des matières:
Vidéo: 001 — Introduction au cours 2024
Lorsque vous démarrez un nouveau projet Java, Android Studio vous propose de créer une activité pour votre projet. Android Studio vous propose différents types d'activités, telles qu'une activité de base, une activité vide, une activité de connexion, etc. Si vous demandez une activité vide, vous obtenez ce code:
package com. allyourcode. a10_11;
importer Android. soutien. v7. app. AppCompatActivity;
importer Android. os. Paquet;
public class MainActivity étend AppCompatActivity {
@Override
protected void surCreate (Bundle savedInstanceState) {
super. onCreate (savedInstanceState);
setContentView (disposition R., activité_main);
}
}
Le code déclare une classe nommée
MainActivity
. Ce nom
MainActivity
ne fait pas partie de la bibliothèque de l'API Android. C'est un nom que vous créez lorsque vous créez un nouveau projet Android. (En réalité, Android Studio constitue le nom.Vous acceptez le nom ou vous le changez en un autre nom lorsque vous suivez les étapes pour créer un nouveau projet.)
La classe
MainActivity
étend une classe qui appartient à la bibliothèque SDK d'Android, à savoir la classe
AppCompatActivity
. En d'autres termes, l'objet
MainActivity
est un objet
AppCompatActivity
. L'objet
MainActivity
possède tous les droits et responsabilités de toute instance
AppCompatActivity
. Par exemple,
MainActivity
a une méthode
onCreate
, qu'elle écrase.
En fait, la classe
MainActivity
hérite d'environ 460 lignes de code de la classe
AppCompatActivity
d'Android, qui hérite d'environ 1 000 lignes d'Android
Classe FragmentActivity
, qui hérite d'environ 6 700 lignes de la classe Activity d'Android. Les méthodes héritées incluent celles
getCallingActivity
,
getCallingPackage
,
getParent
,
getTitle
,
getTitleColor
,
getWindow
,
onBackPressed
,
onKeyDown
,
onKeyLongPress
,
onLowMémoire
,
onMenuItemSelected
,
setTitle <,
setTitleColor
,
startActivity
, fin, et beaucoup, beaucoup d'autres. Vous héritez de toutes ces fonctionnalités avec deux mots simples: extends
AppCompatActivity
.
Dans la terminologie des relations familiales, votre classe
MainActivity
est un descendant de la classe
Activité
d'Android. Votre classe
MainActivity
est une sorte
d'activité
.
Cette image, extraite directement de la documentation en ligne d'Android, résume ces informations sur la classe
AppCompatActivity
.
Un arbre généalogique AppCompatActivity.
En plus d'être une sous-classe, la classe
AppCompatActivity
implémente un tas d'interfaces, dont l'interface
AppCompatCallback
, l'interface
TaskStackBuilder
et d'autres. Vous n'avez pas besoin de vous en souvenir. Si vous avez besoin de le savoir, vous pouvez le rechercher sur la page de documentation d'Android.
Super mot-clé de Java, revisité
Le mot
super
représente le constructeur de la super-classe. Un code différent utilisait le mot-clé
super
de différentes manières. Oui,
super
a toujours quelque chose à voir avec la classe parente d'une classe. Mais, non,
super
ne se réfère pas toujours au constructeur de la classe parente.
Dans une méthode
onCreate
, l'appel
super. onCreate (savedInstanceState)
envoie
savedInstanceState
à la méthode onCreate
de la classe parente
. La classe parente est la classe
AppCompatActivity
. Java appelle donc la méthode
AppCompatActivit
y
onCreate
.
La méthode
de la classe
onCreat
de la classe
AppCompatActivity
contient son propre appel à super
. onCreate (savedInstanceState)
. Le parent de la classe
AppCompatActivity
est la classe
FragmentActivity
. Java passe donc
savedInstanceState
à la méthode
onCreate
de la classe
FragmentActivity
. Etc.
Ce n'est qu'après avoir accédé à la classe
Activity
- l'arrière-grand-parent de votre classe M
ainActivity
- que le code utilise directement la variable
savedInstanceState
. À partir de cette information
savedInstanceState
, le code replace l'activité comme avant le système.
Casting, encore
Lorsque vous appelez
findViewById
, Java ne sait pas quel type d'affichage il trouvera. La méthode
findViewById
renvoie toujours une instance
View
, mais de nombreuses classes d'Android étendent la classe
View
. Par exemple, les classes
Button
,
TextView
,
ImageView
,
CheckBox
,
Chronomètre
et
RatingBar
étendent tous la classe
Vue
d'Android. Si vous tapez le code suivant:
// NE FAITES PAS CECI! !
TextView textView;
textView = findViewById (id de R. textView);
Java laisse échapper un rugissement retentissant: "Comment osez-vous supposer que l'objet renvoyé par un appel à
findViewById
fait référence à une instance de la classe
TextView
! "(En réalité, Java affiche silencieusement et mécaniquement un message d'erreur Types incompatibles dans l'éditeur d'Android Studio.)
Réduire signifie essayer d'attribuer une valeur
longue
à une valeur > int
valeur. Une valeur
long
a 64 bits, et une valeur
int
n'a que 32 bits. Donc, la tentative de rétrécissement échoue. Dans le code que vous trouvez ici, l'appel mauvais
findViewById
est une autre tentative de rétrécissement - assignation de la valeur
View
renvoyée par un appel de méthode à une variable
TextView
.La classe
TextView
est une sous-classe de la classe
View
, donc l'affectation échoue lamentablement.
apaiser les dieux Java en ajoutant un opérateur de casting au code. Vous dites à Java de convertir tout appel sortant de l'appel de méthode
findViewById
en un objet
TextView
.
textView =
(TextView) findViewById (id de l'utilisateur textView1); Pendant que vous tapez le code, Java vous donne l'humour et dit: "Votre opérateur de casting me montre que vous êtes conscient de la différence entre un
TextView
et un ancien
View
. Je ferai de mon mieux pour interpréter l'objet
View
que je trouve à l'exécution en tant qu'objet
TextView
. "(En fait, pendant que vous tapez le code, Java ne dit rien, le fait que Java n'affiche aucun message d'erreur lorsque vous utilisez cette astuce est un bon signe: la fonction de moulage de Java vous permet d'économiser du temps!)
vous empêche de voir un message d'erreur pendant que vous développez votre code. De cette façon, le casting est une fonctionnalité assez utile de Java. Mais le casting ne peut pas vous sauver si votre code contient des erreurs d'exécution. Lorsque vous tapez
textView = (TextView) findViewById (R. id.textView1);
vous vérifiez que le nom
textView
représente un widget
TextView
. Lorsque l'application s'exécute, Java saisit le
R. id. Le widget textView
de l'objet
activity_main. xml
fichier, et tout fonctionne très bien. Mais vous pouvez parfois oublier de vérifier votre
R. java
noms par rapport aux composants dans le fichier XML. Un appel à
findViewById
recrache de façon surprenante un composant
Button
lorsque votre casting dit à Java d'attendre un widget
TextView
. Lorsque cela se produit, Java s'étouffe sur l'opérateur de diffusion et votre application se bloque pendant son exécution. Retour à la planche à dessin!