Innholdsfortegnelse:
Video: Week 1, continued 2025
Når du starter et nytt Java-prosjekt, tilbyr Android Studio å opprette en aktivitet for prosjektet ditt. Android Studio tilbyr deg flere forskjellige typer aktiviteter, for eksempel en grunnaktivitet, en tom aktivitet, en påloggingsaktivitet og så videre. Hvis du ber om en tom aktivitet, får du denne koden:
pakke com. allyourcode. a10_11;
importer android. Brukerstøtte. v7. app. AppCompatActivity;
import android. os. Bunt;
offentlig klasse MainActivity utvider AppCompatActivity {
@Override
beskyttet tomt påCreate (Bundle savedInstanceState) {
super. onCreate (savedInstanceState);
setContentView (R. Layout. Activity_main);
}
}
Koden erklærer en klasse som heter
MainActivity
. Dette navnet
MainActivity
er ikke en del av Android API-biblioteket. Det er et navn du lager når du lager et nytt Android-prosjekt. (Egentlig gjør Android Studio navnet. Du godtar navnet eller endrer det til et annet navn når du følger trinnene for å opprette et nytt prosjekt.)
Klassen
MainActivity
utvider en klasse som tilhører til Android SDK-bibliotek, nemlig klassen
AppCompatActivity
. Med andre ord er
MainActivity
objektet et
AppCompatActivity
objekt. Objektet
MainActivity
har alle rettigheter og ansvar som noen
AppCompatActivity
forekomst har. For eksempel har
MainActivity
en
onCreate
-metode, som den tilsidesetter.
om 460 linjer med kode fra Android's
AppCompatActivity
klasse, som arver omtrent 1.000 linjer fra Android
FragmentActivity
class, som arver rundt 6, 700 linjer fra Android's Aktivitetsklasse. De arvede metoder inkluderer de som
getCallingActivity
, getCallingPackage
,
getParent
,
getTitle
,
getTitleColor
,
,
, på,
,
påKeyDown
,
påKeyLongPress
,
onLowMemory
,
påMenuItemSelected
,
setTitle <,
setTitleColor
,
startAktivitet
, ferdig og mange, mange andre. Du arver all denne funksjonaliteten med to enkle ord: utvider
AppCompatActivity
.
I terminologien til familieforhold er klassen din
MainActivity
en etterkommer av Android's
Aktivitet
klasse. Din klasse
MainActivity
er en slags
Aktivitet
.
Dette bildet, tatt direkte fra Android's online dokumentasjon, oppsummerer denne informasjonen om klassen
AppCompatActivity
.
Et AppCompatActivity-treet.
Bokmerk siden for enkel tilgang til Android's API-biblioteksdokumentasjon.
I tillegg til å være en underklasse, implementerer klassen
en mengde grensesnitt, inkludert
AppCompatCallback
grensesnittet,
TaskStackBuilder
grensesnittet og andre. Du trenger ikke å huske noe av dette. Hvis du noen gang trenger å vite det, kan du se det opp på Android's dokumentasjonsside.
Java's superord, revisited
Ordet
super
står for superklassens konstruktør. Ulike kode brukte
super
søkeordet på en annen måte. Ja,
super
har alltid noe å gjøre med en klasses foreldreklasse. Men nei,
super
refererer ikke alltid til foreldrenes klassens konstruktør.
I en
onCreate
-metode, blir samtalen
super. onCreate (savedInstanceState)
sender
savedInstanceState
til foreldreklassens
onCreate
-metode. Foreldreklassen er klassen
AppCompatActivity
. Så kalles Java
AppCompatActivit
y klassens
onCreate
-metode.
Metoden
AppCompatActivity
klassens
onCreat
e inneholder sin egen samtale 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 ikke før du kommer til klassen
Aktivitet
- din M
klasse over besteforeldre - at koden direkte bruker
savedInstanceState
-variabelen. Fra denne
savedInstanceState
-informasjonen, setter koden aktiviteten tilbake som det var før systemet ødela det.
Casting, again
Når du ringer
findViewById
, vet Java ikke hvilken type visning den vil finne. Metoden
findViewById
returnerer alltid et eksempel på
Vis
, men mange Android-klasser utvider klassen
Vis
. For eksempel er klassene
Knapp
,
Tekstvisning
,
ImageView
,
CheckBox
,
Kronometer
og
RatingBar
Alle utvider Android's
View
klasse. Hvis du skriver inn følgende kode:
// IKKE GJØR DETTE! !
TextView textView;
textView = findViewById (R. Id. TextView);
Java lar ut en rungende, forferdelig brøl: "Hvordan tør du anta at objektet returneres ved et kall til
findViewById
refererer til en forekomst av klassen
TextView
! "(Faktisk viser Java tydelig og mekanisk en feilmelding på
Inkompatible typer
i Android Studios redigerer.)
Narrowing
betyr å forsøke å tilordne en lang verdi til en > int
verdi. En verdi på lang
har 64 biter, og en verdi på
int
har bare 32 biter. Så forsøket på innsnevring mislykkes. I koden du finner her, er det dårlige
findViewById
-samtalen et annet forsøk på å gjøre innsnevring - tilordne verdien
Vis
returnert av en metodeanrop til en
TextView
-variabel.Klassen
TextView
er en underklasse av klassen
Vis
, slik at oppgaven mislykkes.
beundre Java-gudene ved å legge til en casting-operatør til koden. Du forteller Java for å konvertere hva som helst som kommer fra
findViewById
metodeanropet til et
TextView
objekt.
textView =
(TextView)
findViewById (R.ID.textView1);
Mens du skriver koden, hummer du Java og sier, "Din casting operatør viser meg at du er klar over forskjellen mellom en
TextView
og en hvilken som helst gammel View . Jeg vil gjøre mitt beste for å tolke objektet
Vis
som jeg finner ved kjøretid som et
TextView
objekt. "(Faktisk, mens du skriver koden, sier Java ingenting. Det faktum at Java ikke viser noen feilmeldinger når du bruker dette casting-tricket, er et godt tegn. Java-gjengingsfunksjonen sparer dagen!)
Casting hindrer deg i å se en feilmelding mens du utvikler koden din. På den måten er støping ganske nyttig for Java. Men casting kan ikke spare deg hvis koden din inneholder kjøretidsfeil. Når du skriver inn
textView = (TextView) findViewById (R. Id. TextView1);
du bekrefter at navnet
textView
representerer en
TextView
-grensesnitt. Når appen kjører, griper Java
R. id. textView
widget fra
activity_main. xml
fil, og alt fungerer bra. Men du kan noen ganger glemme å sjekke
R. java
navn på komponentene i XML-filen. En samtale til
findViewById
spretter overraskende ut en
Button
komponent når avstøpningen din forteller at Java forventer en
TextView
widget. Når dette skjer, støter Java på støpingsoperatøren, og appen din krasjer under kjøringen. Tilbake til tegnebrettet!
