Button ClickListener Verständnisfragen

  • Antworten:1
BL007
  • Forum-Beiträge: 2

19.02.2019, 07:48:33 via Website

Hallo,

zwar hab ich etliche Jahre Programmierung hinter mir, das aber in Ansi-C, Assembler, auch einiges in Delphi. Aber von haus aus hatte ich sowas nie in der Ausbildung.
Jetzt aber muß ich mich in App und Java reinfummeln. Da hatte ich nun ein Problem. Ich habe in eine aus dem Internet zusammengestoppelte App einen neuen Button gebastelt und wollte mit der "onClickListener"-Methode auf den Click reagieren. Was ich dazu brauchte, hab ich mir größtenteils aus der App von anderen Buttons zusammenkopiert. Es klappte aber nicht, nur Fehlermeldungen beim Compilieren. Nach drei Tagen fand ich den Fehler: ein ");", was nach der letzten geschweiften Klammer am Ende fehlte.btnProbier.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
bla bla bla
}
});

Sowas kenn ich nun gar nicht.
Wenn ich das richtig kapiere, ist onClickListener eine Methode der Klasse Button und in dem Fall der Instanz "btnProbier". Oder ist das falsch? Dann wird die Methode und in der ersten Zeile aufgerufen und in den Parametern durch "new" eine weitere Methode "onClick" instanziert. Erst die macht dann was mit dem Event des Klickens.
Ist das so richtig verstanden?
Wieso aber wird dann die Methode in den Aufruf zur Instanz, also in die normalen Klammern geschrieben?

Nächste Frage - Wenn ich einen Button im Android-Studio per Maus in die App reinziehe, kann ich rechts auf die Attribute und events zugreifen. Nun hab ich in einem schlauen Buch gelesen, dass ich eine Methode schreiben und diese dort unter "onClick" hinterlegen kann. So ähnlich lief das ja auch in Delphi. Bei dieser App bietet er mit aber nur eine (in dem Fall leere) Methode aus einer Datei "DeviceListActivity.java" an. Muß man solche Methoden also immer in diese Device-Datei schreiben, gehören die nicht in die normale Activity?

— geändert am 19.02.2019, 10:25:39 durch Moderator

Kommentieren
Gelöschter Account
  • Forum-Beiträge: 79

19.02.2019, 08:53:57 via Website

Hi BL007,
Die Klammer-Zu ganz am Ende gehört zu der der Klammer-Auf von der Methode ganz am Anfang. Alles was dazwischen steht, ist das Attribut, mit dem zu die Funktion setOnClickListener ausführst. Das das eine Methode von dem Button ist, hast du richtig verstanden.
Der new View.OnClickListener() Teil ist aber kein weiterer Methodenaufruf, sondern du erstellst damit ein neues Objekt der Klasse OnClickListener(), weil das aber nur ein Interface ist, implementierst du es noch mit dem, was dann in den Geschweiften Klammern steht.

Du könntest es im Prinzip auch so schreiben, dann wird es vielleicht leichter verständlich, was gemeint ist:

View.OnClickListener myListener = new View.OnClickListener() {
@Override
public void onClick(View v)
{
bla bla bla
} 
};
btnProbier.setOnClickListener(myListener);

Also man erstellt praktisch einen neuen OnClickListener und sagt dem Button dann, dass er den benutzen soll.

Was diese Optionen in Android-Studio angeht: Das habe ich irgendwann auch schonmal benutzt, ich glaube, man muss da einfach den Namen einer Funktion in der MainActivity eintragen und dann gehts. Ist aber soweit ich mich erinner alles leicht im Inet zu finden.

— geändert am 19.02.2019, 08:55:36

Hilfreich?
Pascal P.
Kommentieren