# Einzel Verarbeitung welcher Button angeklickt wurde?



## Maresuke94 (20. Okt 2013)

Hi Leute,
Ich Programmiere gerade ein Spiel, in meinem Buch erklärt er jedoch immer nur wie man einen Button im Layout anspricht, mit dem OnClickListener. Was ist aber wenn ich drei oder vier Button habe? 
Wie frage ich ab, dass ich den Options Button angeklickt habe, und nicht Start?
Ich habe daran gedacht, finde aber nicht die passende Methode:

```
Button Optionen = (Button) findViewById(R.id.OptionenButton);
public void onClick(View v)
{
  if(Optionen.Clicked == true)
  {
    do something...
  }
}
```
Problem die abfrage ob der Button geklickt wurde gibt es nicht so in dem Stil oder? 
Gruß Mare


----------



## eRaaaa (20. Okt 2013)

Du bekommst im Listener doch die View die das Event ausgelöst hat mit übergeben:
if(optionen ==v)
:autsch:???:L


----------



## Maresuke94 (20. Okt 2013)

achso, ich glaub jetzt wird mir einiges klar.
Wenn ich den Button Optionen klicke, dann steht in "v = optionen"?
Steht da die Button id, oder der String Text?
Sry bin ziemlicher anfänger


----------



## eRaaaa (20. Okt 2013)

Da bekommst du die Referenz zu dem Button, also genau so wie in deiner ersten Zeile (vergleichbar).
Sprich du kannst jetzt die View v zu einem Button casten und dann mittels der Methoden aus der Button-Klasse den Text abfragen oder sonst was damit machen.
Die Abfrage macht aber eig. auch nur Sinn wenn du mehreren Buttons den selben Listener registriert hast.


----------



## Maresuke94 (20. Okt 2013)

mal eine dumme frage, aber welche Listener gibt es denn noch ausser dem OnClickListener?
Weil du sagst, dass es nur sinn macht wenn ich mehrere Button auf den selben Listener referenziere?
lg


----------



## eRaaaa (20. Okt 2013)

Maresuke94 hat gesagt.:


> mal eine dumme frage, aber welche Listener gibt es denn noch ausser dem OnClickListener?


gibt da noch ein paar, aber darum geht es hier doch gerade gar nicht...


> Weil du sagst, dass es nur sinn macht wenn ich mehrere Button auf den selben Listener referenziere?
> lg



Eben, mehrere Button EINEM Listener und nicht mehrere Listener EINEM Button 
Naja, du willst ja schließlich gerade erfragen ob der Optionen-Button gedrückt wurde, wenn du diesen Listener aber nur dem Optionen-Button registriert hast und keinem weiteren, kann es eben nur der Optionen-Button sein 

Beispiel:

```
//zwei Buttons
Button optionen = (Button) findViewById(R.id.OptionenButton);
Button beenden = (Button) findViewById(R.id.ExitButton);
//bekommen beide den selben Click-Listener:
		OnClickListener clickListener = new OnClickListener() {
			@Override
			public void onClick(View v) {
				if(v == optionen){
					//der optionen-button wurde gedrueckt
				}else if(v == exit){
					//exitbutton gedrueckt
				}
			}
		};
optionen.setOnClickListener(clickListener);
beenden.setOnClickListener(clickListener);
```

Aber will dich jetzt nicht noch weiter verwirren


----------



## kaoZ (22. Okt 2013)

Naja , entweder du machst alles über einen Listener indem du die klasse implementierst , oder du erstellt für jeden button halt einen eigenen "neuen" OnClickListener,

abhandeln kannst du dann alles z.B in einer switch/case anweisung like :


```
public class Foo implements OnClickListener{ // implementiert OnClickListener

  Button buttonEins;
  Button buttonZwei;

  public void onCreate(){

    buttonEins = (Button)findViewById(R.id.btnEins);
    buttonEins = (Button)findViewById(R.id.btnZwei);

    buttonEins.setOnClickListener(this);
    buttonZwei.setOnClickListener(this);

    switch(v.getId())
    {
      case R.id.btnEins:
      // Do something with your code
    break;
      case R.id.btnZwei:
      // Do some other stuff with your code
    break;
    }
  }
}
```

oder halt wie mein vorredner schon erwähnte über erstellung einer anonymen inneren klasse und erzeugen eines neuen listener objektes, je nach dem wie du es halt brauchst oder haben möchtest


----------

