Ich möchte ein konkretes Beispiel für die Benutzeroberfläche vorstellen, die beim Erstellen einer Android-Anwendung verwendet wird.
Der Listener hier ist in View.java
definiert.
Mit AndroidStudio können Sie mit Befehl + B
zu dem in der Klasse definierten Ort springen. Überprüfen Sie dies daher bitte.
Es wird manchmal als Ereignis-Listener bezeichnet.
Wird beim Programmieren mit mehreren Threads verwendet.
Referenz: Android Developer-Prozesse und -Threads
Nehmen wir als Beispiel OnClickListener.
Übergeben Sie die Schnittstelle als Argument an die setOnClickListener-Methode der View-Klasse.
Button button = new Button(this);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Was tun, wenn auf die Schaltfläche geklickt wird?
}
});
Sie können es auch vorab einer Variablen zuweisen. (Ich werde es nicht tun ...)
Button button2 = new Button(this);
View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
//Was tun, wenn auf die Schaltfläche geklickt wird?
}
};
button2.setOnClickListener(onClickListener);
Die in Java8 implementierte neue Grammatik Lambda muss für die Verwendung unter Android vorbereitet werden.
Beziehen Sie sich auf diese Seite,
app/build.gradle
android {
defaultConfig {
...
jackOptions {
enabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Fügen Sie die beiden oben genannten Stellen hinzu.
Zu diesem Zeitpunkt ist es erforderlich, dass die Version von gradle in gradle-wrapper.properties 2.1.0 oder höher ist.
Button button3 = new Button(this);
button3.setOnClickListener((View v)->{
//Was tun, wenn auf die Schaltfläche geklickt wird?
});
Es scheint keine klare Antwort auf "Wie soll ich es schreiben?" Zu geben.
Es ist ein kleiner alter Artikel,
Persönlich schreibe ich gerne in anonymen Klassen und ich mag es nicht wirklich, Geräte in Acitivyt oder Fragment zu implementieren (weil es sich seltsam objektorientiert anfühlt ...)