Inhaltsverzeichnis:
Video: Linux Tutorial for Beginners: Introduction to Linux Operating System 2024
Wenn Sie ein neues Java-Projekt starten, bietet Android Studio an, eine Aktivität für Ihr Projekt zu erstellen. Android Studio bietet Ihnen verschiedene Aktivitäten an, z. B. eine einfache Aktivität, eine leere Aktivität, eine Login-Aktivität und so weiter. Wenn Sie nach einer leeren Aktivität fragen, erhalten Sie diesen Code:
Paket com. Allyourcode. a10_11;
Import Android. Unterstützung. v7. App. AppCompatAktivität;
Import Android. os. Bündeln;
public class MainActivity erweitert AppCompatActivity {
@Override
geschützt void onCreate (Bundle savedInstanceState) {
super. onCreate (gespeicherterInstanzStatus);
setContentView (R. layout. Activity_main);
}
}
Der Code deklariert eine Klasse namens
MainActivity
. Dieser Name
MainActivity
ist nicht Teil der Android API-Bibliothek. Es ist ein Name, den Sie beim Erstellen eines neuen Android-Projekts festlegen. (Eigentlich macht Android Studio den Namen. Sie akzeptieren den Namen oder ändern ihn in einen anderen Namen, wenn Sie die Schritte befolgen, um ein neues Projekt zu erstellen.)
Die
MainActivity
-Klasse erweitert eine Klasse, die gehört in die SDK-Bibliothek von Android, nämlich die
AppCompatActivity
-Klasse. Mit anderen Worten ist das
MainActivity
-Objekt ein
AppCompatActivity
-Objekt. Das
MainActivity
-Objekt verfügt über alle Rechte und Verantwortlichkeiten, die jede
AppCompatActivity
-Instanz hat. Beispielsweise verfügt
MainActivity
über eine Methode
onCreate
, die überschrieben wird.
In der Tat erbt die
MainActivity
-Klasse etwa 460 Codezeilen aus der
AppCompatActivity
-Klasse von Android, die etwa 1 000 Zeilen von Android
FragmentActivity
-Klasse, die etwa 6,700 Zeilen von der Activity-Klasse von Android erbt. Zu den geerbten Methoden gehören solche wie
getCallingActivity
,
getCallingPackage
,
getParent
,
getTitle
,
getTitleColor
,
getWindow
,
onBackPressed
,
onKeyDown
,
onKeyLongPress
,
onLowMemory
,
onMenuItemSelected
,
setTitle <,
setTitleColor
,
startActivity
, beenden und viele, viele andere. Sie erben alle diese Funktionen mit zwei einfachen Worten: extends
AppCompatActivity
.
In der Terminologie familiärer Beziehungen ist Ihre
MainActivity
-Klasse ein Nachkomme der Android-Klasse
Activity
. Ihre
MainActivity
Klasse ist eine Art
Aktivität
.
Dieses Bild, das direkt aus der Online-Dokumentation von Android stammt, fasst diese Informationen zur
AppCompatActivity
-Klasse zusammen.
Ein AppCompatActivity-Stammbaum.
Neben der Unterklasse implementiert die
AppCompatActivity
-Klasse eine Reihe von Schnittstellen, darunter die
AppCompatCallback
-Schnittstelle, die
TaskStackBuilder
-Schnittstelle und andere. Sie müssen sich an nichts davon erinnern. Wenn Sie es jemals wissen müssen, können Sie es auf der Dokumentationsseite von Android nachschlagen.
Das Super-Schlüsselwort von Java, revisited
Das Wort
super
steht für den Konstruktor der Superklasse. Anderer Code verwendet das Schlüsselwort
super
auf unterschiedliche Weise. Ja,
super
hat immer etwas mit der Elternklasse einer Klasse zu tun. Aber nein,
super
bezieht sich nicht immer auf den Konstruktor der übergeordneten Klasse.
Bei einer
onCreate
-Methode ist der Aufruf
super. onCreate (savedInstanceState)
sendet
savedInstanceState
an die
onCreate
-Methode der übergeordneten Klasse. Die übergeordnete Klasse ist die
AppCompatActivity
-Klasse. Java ruft also die Methode
AppCompatActivit
y
onCreate
auf.
Die
onCreat
e-Methode der
AppCompatActivity
-Klasse enthält einen eigenen Aufruf von
super. onCreate (gespeicherterInstanzStatus)
. Das übergeordnete Element der
AppCompatActivity
-Klasse ist die
FragmentActivity
-Klasse. So übergibt Java
savedInstanceState
an die
onCreate
-Methode der
FragmentActivity
-Klasse. Und so weiter.
Erst in der Klasse
Activity
- der Urgroßmutter Ihrer M
ainActivity
-Klasse - verwendet der Code direkt die Variable
savedInstanceState
. Von dieser
savedInstanceState
Information setzt der Code die Aktivität so zurück, wie sie war, bevor das System sie zerstört hat.
Casting, wieder
Wenn Sie
findViewById
aufrufen, weiß Java nicht, welche Art von Ansicht es finden wird. Die
findViewById
-Methode gibt immer eine
View
-Instanz zurück, aber viele Android-Klassen erweitern die
View
-Klasse. Zum Beispiel die Klassen
Button
,
TextView
,
ImageView
,
CheckBox
,
Chronometer
und
RatingBar
erweitern die Android
View
-Klasse. Wenn Sie den folgenden Code eingeben:
// TUN SIE DIES NICHT! !
TextView textView;
textView = findViewById (R. Id. TextView);
Java lässt einen durchdringenden, nachtragenden Dröhner raus: "Wie können Sie es wagen, davon auszugehen, dass das durch einen Aufruf von
findViewById
zurückgegebene Objekt auf eine Instanz der
TextView
-Klasse verweist! "(Tatsächlich zeigt Java leise und mechanisch eine
Inkompatible Typen Fehlermeldung im Editor von Android Studio an.) Eingrenzen
bedeutet, einem einen
langen
Wert zuzuweisen > int
Wert. Ein
langer
-Wert hat 64 Bit und ein
int
-Wert hat nur 32 Bit. Der Versuch einer Verengung scheitert also. In dem Code, den Sie hier finden, ist der Aufruf von
findViewById
ein weiterer Versuch, eine Verengung vorzunehmen. Dabei wird der
View
-Wert zugewiesen, der von einem Methodenaufruf an eine
TextView
-Variable zurückgegeben wird.Die
TextView
-Klasse ist eine Unterklasse der
View
-Klasse, sodass die Zuordnung kläglich fehlschlägt.
Beschwichtigen Sie die Java-Götter, indem Sie dem Code einen Casting-Operator hinzufügen. Sie weisen Java an, alles, was aus dem Methodenaufruf
findViewById
herauskommt, in ein
TextView
-Objekt umzuwandeln.
textView =
(TextView) findViewById (R. Id. TextView1); Während Sie den Code eingeben, nimmt Sie Java zur Kenntnis und sagt: "Ihr Casting-Operator zeigt mir, dass Sie den Unterschied zwischen
TextView
und jeder alten
Ansicht
kennen… Ich werde mein Bestes tun, um das
View
-Objekt zu interpretieren, das ich zur Laufzeit als
TextView
-Objekt finde. "(Tatsächlich, während Sie den Code eingeben, sagt Java nichts. Die Tatsache, dass Java keine Fehlermeldungen anzeigt, wenn Sie diesen Casting-Trick verwenden, ist ein gutes Zeichen. Java Casting-Funktion rettet den Tag!)
Casting verhindert, dass Sie eine Fehlermeldung sehen, während Sie Ihren Code entwickeln. Auf diese Weise ist das Casting ein nützliches Feature von Java. Das Casting kann Sie jedoch nicht speichern, wenn Ihr Code Laufzeitfehler enthält. Wenn Sie
eingeben textView = (TextView) findViewById (R. Id. TextView1);
Sie überprüfen, ob der Name
textView
ein
TextView
Widget ist. Wenn die App ausgeführt wird, greift Java auf das
R zu. Ich würde. textView
widget aus dem
activity_main. xml
Datei, und alles funktioniert gut. Aber Sie können manchmal vergessen, Ihr
R zu überprüfen. Java
benennt die Komponenten in der XML-Datei. Ein Aufruf von
findViewById
spuckt überraschenderweise eine
Button
-Komponente aus, wenn Ihr Casting Java anweist, ein
TextView
-Widget zu erwarten. Wenn dies geschieht, verschluckt Java den Casting-Operator und Ihre App stürzt während des Laufs ab. Zurück zum Zeichenbrett!