Einzel Verarbeitung welcher Button angeklickt wurde?

Maresuke94

Mitglied
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:
Code:
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
 
Zuletzt bearbeitet:

Maresuke94

Mitglied
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

Top Contributor
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

Mitglied
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

Top Contributor
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 :p

Beispiel:
Java:
//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

Top Contributor
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 :

Java:
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
 
Zuletzt bearbeitet:
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben