# Auf onClick-Listener reagieren und Parameter übergeben (Android Studio)



## OSchriever (28. Dez 2020)

Hi, 
ich habe in Android Studio einen Button, dem habe ich dann in der xml per onClick eine Methode zugewiesen, die dann ausgeführt werden soll.
Nun habe ich aber mehrere Buttons, die die gleiche Methode aufrufen sollen, jedoch sollen die Methoden wissen, welcher Button geklickt wurde um dann die jeweiligen dazugehörigen Dinge auszuführen. Wenn ich die Buttons klicke, dann möchte ich gerne, dass mir an die Methode in irgendeiner Weise übergeben wird, welcher Button geklickt wurde. Oder wie macht man das?
Vielen Dank


----------



## kneitzel (28. Dez 2020)

Das wird hier beschrieben:








						Buttons  |  Android Developers
					






					developer.android.com
				




Und falls das View Dich irritiert hat: Ein Button erbt auch von View:


			https://developer.android.com/reference/android/widget/Button
		


Du hast also eine Methode, die eine View als Parameter hat. Dieser Parameter ist der Button (Oder welches Control gedrückt wurde), der das Event ausgelöst hat.


----------



## OSchriever (29. Dez 2020)

Vielen Dank.
Wie kann ich denn auf dieses View reagieren? Ich muss dann in meiner Methode ja dann mit einer if-Abfrage herausfinden, welches View mir da übergeben wurde...


----------



## kneitzel (29. Dez 2020)

Deine Buttons hast Du ja mit id definiert. Und die View hat ein getId Getter für die Idee. Daher solltest Du prüfen können, ob `view.getId() == R.id.dein_button` ist. Das wäre so mein Ansatz in der Fragestellung.

Ein anderer Weg wäre, dass Du die Referenz auf die Buttons schon hast in Deiner Activity. Dann solltest Du einfach die Referenzen vergleichen. Das wäre aber nur, wenn Du die Controls manuell erzeugt haben solltest und nicht per xml.

Dann werfe ich (da wir evtl. am Ende sind) eine ganz ketzerische Frage in den Raum, die Du auch nicht weiter beantworten musst: Wieso nicht mehrere Methoden? Das würde dann eine if else if Kette oder Switch Statement ersparen. Gemeinsamer Code kann ja weiter in einer separaten Methode zu finden sein (wäre ja ein normales Refactoring für doppelten Code). Aber ich kenne den genauen Anwendungsfall nicht, daher kann ich das nicht beurteilen, aber bei den Anwendungfällen, die mir derzeit so durch den Kopf gehen, wäre das wohl meine bevorzugte Variante... (Aber das ist keinerlei Bewertung - Mach es so, wie Du es am lesbarsten und am verständlichsten findest!)


----------



## OSchriever (29. Dez 2020)

Vielen Dank, das hilft mir sehr weiter. Zu deiner Frage:
Jeder der Buttons soll den MediaRecorder starten und eine File erstellen, und jede Datei hat natürlich einen anderen Namen, also auf den 2. Button geklickt und es wird eine neue Datei mit dem Namen Datei2(Beispiel) erstellt. Vorher wird dann auch noch gefragt ob die Datei schon existiert und ggf. gelöscht. In dieser Methode wird die nächste Methode aufgerufen (per onClickListener von einem anderen Button, der aber immer der gleiche Button ist) und diese Methode muss wieder wissen, um welche Datei es nun geht, da dort der angeklickte Button wieder verwendet wird um ihm einen neuen Text zu setzen... Aber das bekomme ich hin. Learning by doing.  

Vielen Dank nochmal, da ich jetzt weiß wie ich mit der View arbeiten kann, hast du mir SEHR geholfen.


----------

