Indholdsfortegnelse:
Video: ZEITGEIST: MOVING FORWARD | OFFICIAL RELEASE | 2011 2025
Når du starter et nyt Java-projekt, tilbyder Android Studio at oprette en aktivitet til dit projekt. Android Studio tilbyder dig flere forskellige former for aktiviteter, såsom en grundlæggende aktivitet, en tom aktivitet, en loginaktivitet osv. Hvis du beder om en tom aktivitet, får du denne kode:
pakke com. allyourcode. a10_11;
importer android. support. v7. app. AppCompatActivity;
import android. OS. Bundt;
offentlig klasse MainActivity udvider AppCompatActivity {
@Override
beskyttet tomrum påCreate (Bundle savedInstanceState) {
super. onCreate (savedInstanceState);
setContentView (R. Layout. Activity_main);
}
}
Koden erklærer en klasse ved navn
MainActivity
. Dette navn
MainActivity
er ikke en del af Android API-biblioteket. Det er et navn, du laver, når du opretter et nyt Android-projekt. (Faktisk opretter Android Studio navnet. Du accepterer navnet eller ændrer det til et andet navn, når du følger trinene for at oprette et nyt projekt.)
Klassen
MainActivity
udvider en klasse, der tilhører til Android SDK bibliotek, nemlig
AppCompatActivity
klassen. Med andre ord er
MainActivity
-objektet et
AppCompatActivity
objekt. Objektet
MainActivity
har alle rettigheder og ansvar, som enhver
AppCompatActivity
forekomst har. For eksempel har
MainActivity
en
onCreate
metode, som den tilsidesætter.
arvet omkring 460 linjer kode fra Android's
AppCompatActivity
klasse, som arver omkring 1.000 linjer fra Android's
FragmentActivity
klasse, som arver omkring 6, 700 linjer fra Android's Aktivitetsklasse. De arvede metoder omfatter dem som
getCallingActivity
,
getCallingPackage
,
getParent
,
getTitle
,
getTitleColor
,
getWindow
,
,
påKeyDown
,
onKeyLongPress
,
onLowMemory
,
onMenuItemSelected
,
setTitle <,
setTitleColor
,
startAktivitet
, finish og mange, mange andre. Du arver alle denne funktionalitet med to enkle ord: udvider
AppCompatActivity
.
I terminologien af familiemæssige forhold er din
MainActivity
-klasse en efterkommer af Android's
Aktivitet
klasse. Din klasse
MainActivity
er en slags
Aktivitet
.
Dette billede, taget direkte fra Android's online dokumentation, opsummerer disse oplysninger om klassen
AppCompatActivity
.
Et AppCompatActivity-stamtræ.
Bogmærker siden for nem adgang til Android's API-biblioteksdokumentation.
Ud over at være en underklasse implementerer klassen
en flok grænseflader, herunder
AppCompatCallback
interface,
TaskStackBuilder
interface og andre. Du behøver ikke at huske noget herom. Hvis du nogensinde har brug for at kende det, kan du se det på Android's dokumentationsside.
Java's superord, revisited
Ordet
super
står for superclassens konstruktør. Forskellige kode brugte
super
nøgleordet på forskellige måder. Ja,
super
har altid noget at gøre med en klasses forældreklasse. Men nej,
super
refererer ikke altid til forældersklassens konstruktør.
I en
onCreate
metode kaldes opkaldet
super. onCreate (savedInstanceState)
sender
savedInstanceState
til moderklassens
onCreate
metode. Forældren klassen er klassen
AppCompatActivity
. Så Java kalder
AppCompatActivit
y klassens
onCreate
metode.
AppCompatActivity
klassens
onCreat
e metode indeholder sit eget opkald til
super. onCreate (savedInstanceState)
. Klassen
AppCompatActivity
klassen er klassen
FragmentActivity
. Så Java overgår
savedInstanceState
til
FragmentActivity
klassens
onCreate
metode. Og så videre.
Det er først, før du kommer til klassen
Aktivitet
- din M
klasse over bedsteforældre - at koden direkte bruger
savedInstanceState
variablen. Fra denne
savedInstanceState
information sætter koden aktiviteten tilbage som det var før systemet ødelagde det.
Casting, igen
Når du ringer til
findViewById
, ved Java ikke, hvilken slags visning den finder. Metoden
findViewById
returnerer altid et
Vis
eksempel, men mange Android-klasser forlænger klassen
Vis
. For eksempel er klasserne
Button
,
TextView
,
ImageView
,
CheckBox
,
Chronometer
og
RatingBar
alle udvider Android's
View
klasse. Hvis du skriver følgende kode:
// GØR DET IKKE! !
TextView textView;
textView = findViewById (R. Id. TextView);
Java udløser et rungende, gnidende brøl: "Hvordan tør du antage, at objektet returneres af et opkald til
findViewById
henviser til en forekomst af klassen
TextView
! "(Faktisk viser Java stille og mekanisk en fejlmeddelelse
Inkompatible typer
i Android Studio's editor.)
Narrowing
betyder at forsøge at tildele en lang værdi til en > int
værdi. En værdi på lang
har 64 bit, og en værdi på
int
har kun 32 bit. Så forsøget på indsnævring fejler. I den kode, du finder her, er det dårlige
findViewById
-opkald et andet forsøg på at gøre indsnævring - tildele værdien
Vis
returneret af et metodeopkald til en
TextView
-variabel.Klassen
TextView
er en underklasse af klassen
Vis
, så opgaven mislykkes miserably.
forkæle Java-guderne ved at tilføje en casting operator til koden. Du fortæller Java om at konvertere, hvad der kommer ud af
findViewById
metodeopkaldet til et
TextView
objekt.
textView =
(TextView)
findViewById (R. Id. TextView1);
Mens du skriver koden, humør Java dig og siger, "Din casting operatør viser mig at du er opmærksom på forskellen mellem en
TextView
og enhver gammel Vis . Jeg vil gøre mit bedste for at fortolke det
Vis
objekt, som jeg finder ved kørsel som et
TextView
objekt. "(Faktisk, når du skriver koden, siger Java ingenting. Det faktum, at Java ikke viser nogen fejlmeddelelser, når du bruger dette casting-trick er et godt tegn. Java's støbningsfunktion sparer dagen!)
Casting forhindrer dig i at se en fejlmeddelelse, mens du udvikler din kode. På den måde er støbning en ganske nyttig funktion af Java. Men casting kan ikke gemme dig, hvis din kode indeholder runtime fejl. Når du skriver
textView = (TextView) findViewById (R. Id. TextView1);
du verificerer, at navnet
textView
repræsenterer en
TextView
widget. Når appen kører, griber Java
R. id. textView
widget fra
activity_main. xml
fil, og alt fungerer fint. Men du kan undertiden glemme at tjekke din
R. java
navne mod komponenterne i XML-filen. Et opkald til
findViewById
springer overraskende ud en
Button
komponent, når dit casting fortæller Java at forvente en
TextView
widget. Når dette sker, kvæler Java på casting operatøren, og din app går ned i løbet af løbet. Tilbage til tegnebrættet!