Java Android onClickListener vs. einfache Methode, Unterschied?

Physically

Lt. Commander
Registriert
Nov. 2010
Beiträge
1.708
Hallo,

und zwar habe ich mal ne Frage. Ich möchte etwas testen. Wenn ich auf ein Button klicke, soll ein Textfeld mit Text gefüllt werden. Jetzt habe ich zwei Lösungen gefunden, beides funktioniert, das eine ist ein 4-Zeiler, das andere ein 8-Zeiler.

1. Lösung mit einfacher Methode:

Code:
public void SaveNote(View view)
    {
        edittextNoteName.setText("Beispiel, es geeeeht!");
    }

Hier benötigt es noch in der "activity_main_layout.xml" den Eintrag
Code:
android:onClick="SaveNote"/>
beim jeweiligen Button um die Methode mit dem Button zu verknüpfen.

2. Lösung mit einem OnClickListener

Code:
        btnSaveNote.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                edittextNoteName.setText("Beispiel es geeeeht auchh!");
            }
        });

Hier bedarf es keine Änderung mehr in der .xml, da ja der Button direkt angesprochen wird.

Frage: Gibt es einen signifikanten Unterschied zwischen den beiden Lösungen? Beides läuft ja aufs Gleiche hinaus, aber warum gibt es dann noch den OnClickListener. Laut Android heißt es:

Interface definition for a callback to be invoked when a view is clicked.

Das Gleiche habe ich ja auch mit dem 4-Zeiler.
 
Ob es einen Unterschied macht, keine Ahnung. Das Ergebniss ist doch am Ende das Gleiche.
In Java ist OnClickListener die Standard-Methode für solche Sachen. Und die Bibliotheken dafür werden ja auch bei der Android-Programmierung mitgenutzt.
 
Variante 2 kann man mit einer Lambda Expression auch deutlich kürzer schreiben.
 
Ohne mich jetzt in Android Entwicklung konkret auszukennen: Ich vermute der Compiler oder die RunTime macht nachher aus beiden das gleiche. Einmal ist es halt deklarativ definiert und einmal nur im Code. Es führen einfach oft mehrere Wege zum Ziel.
 
Ich kenne mich mit Android nicht so genau aus, aber ist es nicht so, dass man mit der ersten Variante flexibler ist?

In der zweiten Variante definierst du die Aktion für eine konkrete Button Instanz. Wenn sich daran etwas ändert und die Aktion später auf einem anderen Button liegen soll, musst du zwangsläufig den Code anpassen. In der ersten variante würde es reichen den Methodenaufruf in der View auf einem anderen Button zu deklarieren.

Oder angenommen du willst die selbe Funktion auf zwei unterschiedlichen Button liegen haben, dann wäre die Variante 1 mMn auch eleganter, da du deine Klasse nicht mit onClick-Listenern voll müllst, die alle das selbe machen
 
Wenn man die gleiche Aktion zwei mal braucht, verwendet man natürlich eine Methode und schreibt den Code nicht doppelt.
Also anstatt:
Code:
btnSaveNote.setOnClickListener(e -> edittextNoteName.setText("Beispiel es geeeeht auchh!"));

die Methode verwenden:
Code:
btnSaveNote.setOnClickListener(e -> SaveNote());

Oder weist den anonymen Listener einer Variable zu und verwendet die dann mehrmals.
 

Ähnliche Themen

Zurück
Oben