Hallo,
ich bin noch grüner wie grün in Sachen Android-Programmierung und habe gestern angefangen mich einzulesen und vor Allem einzurichten.
Meine Java-Kenntnisse übrigens sind durchwachsen. Größtenteils komme ich gut zurecht, es gibt aber Facetten von Java, von denen ich bisher noch nie wirklich Gebrauch gemacht habe. im GUI-Bereich habe ich auch keine Erfahrung.
Doch zurück zu Android. Nach einem ganz groben Überblick durch feie Infos dient mir zum Lernen nun "Android 4 Apps entwickeln mit dem Android SDK" von Thomas Künneth (für weitere Empfehlungen bin ich offen). Dort bin ich bei dem Anwenden des OnClickListeners angekommen, allerdings tun sich bei mir Fragezeichnen auf, was dort genau geschieht. Zunächst ein Codeschnipsel:
weiter_fertig.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (firstClick) {
nachricht.setText(getString(R.string.hallo,
eingabe.getText()));
eingabe.setVisibility(View.INVISIBLE);
weiter_fertig.setText(R.string.fertig);
firstClick = false;
} else {
finish();
}
}
});
Alles anzeigen
weiter_fertig ist übrigens eine Referenz auf ein Objekt vom Typ Button.
Soweit ich unabhängig von dem Code das Prinzip verstehe ist OnClickListener erstmal nur ein Interface, dass besagt, dass die
Methode "onClick (View v)" implementiert werden muss.
Meine eigene logische Schlussfolgerung wäre, dass ich also zunächst eine Klasse, sagen wir namens "ListenMe" erstelle, die onClickListener implementiert. Darin kann ich dann durch überschreiben von onClick(View v) bestimmen, was beim Click geschehen soll.
Das Ganze würde ich dann per
dem Button-Objekt zuweisen.
Nun ist es aber nicht so, wie ich denke, sondern es steht dieses für mich seltsam erscheinende Code-Konstrukt im Raum.
Dabei wird über "new OnClickListener()" eine Instanz des Interfaces erzeugt? Das ist doch Quatsch - geht doch meines Wissens nach gar nicht? Auch kenne ich die Schreibweise mit dem dahinterstehenden Block nicht.
Was will mir also dieses Stückchen Code genau sagen ?
Hoffe jemand kann Licht in mein Dunkel bringen.
Vielen Dank
Chris303