Frage zu Buttons

C

cz3kit

Neues Mitglied
0
Hallo an alle, ich habe mir heute mal alles runtergeladen, damit ich was für Android entwickeln kann. Ich dachte mir mal zum start, einfach mal TicTacToc zu programmieren, ich bin aber auf ein Problem gestoßen wo ich erst mal nicht weiter komme. Ich habe 9 Buttons und alle sollen einen onClickListner bekommen. Ich will den Listner so schreiben, dass alle 9 Buttons diesen nutzen können.

Mein Problem ist jetzt, wie schreibt ich das, dass ich weiß welcher Button gedrückt wurde??
Also User Brückt Button1 und im Hintergrund weiß mein Listner, "Aha, Button1 wurde gedrückt!"

Ich hoffe ihr könnt mir helfen.

MfG

cz3kit
 
die Standard Buttons haben eine Methode setOnClickListener();
Nachdem du deine ganzen Button instanziirt hast:
Code:
Button b1 = (Button) findViewById(R.id.button1);
Button b2 = (Button) findViewById(R.id.button2);
...
fügst du einen neuen onClickListener hinzu:
Code:
OnClickListener click = new OnClickListener(){
   public void onClick(View v){
      switch(v.getId()){
      case R.id.button1: verrechneButton1();
      case R.id.button2: verrechneButton2();
      }
   }
}
onClick wird überschrieben, (kannst zur Übersicht @Override davorschreiben), und vom System aufgerufen, sobald ein Button gedrückt wurde, der diesem OnClickListener zugewiesen wurde.
Anschließend setzt du diesen:

Code:
b1.setOnClickListener(click);
b2.setOnClickListener(click);

Edit:
Wahrscheinlich wusstest du wohl einfach nichts von der Methode View.getId(); ...
 
Zuletzt bearbeitet:
Ich kann dir bis zum switch case folgen, aber ich verstehe nicht so recht dein "verrechneButton1". Ist das eine Methode oder was soll das darstellen?
 
jop, sie stellt einen Platzhalter für das dar, was du gerne berechnen/ausführen lassen möchtest, wenn der jeweilige Button gedrückt wurde.
 
Hmm, mein Problem ist gerade aber, wenn jemand auf z.B. Button1 drück, dann soll auf Button1 der Text "X" erscheinen und das nur auf Button1. Drückt der User aber Button2, dann wird das halt da gemacht. Verstehste was ich meine? Jede Methode für eig. die selbe Methode aus, muss aber auf sich referenzieren.
 
cz3kit schrieb:
Hmm, mein Problem ist gerade aber, wenn jemand auf z.B. Button1 drück, dann soll auf Button1 der Text "X" erscheinen und das nur auf Button1. Drückt der User aber Button2, dann wird das halt da gemacht. Verstehste was ich meine? Jede Methode für eig. die selbe Methode aus, muss aber auf sich referenzieren.

kein Problem.

Code:
OnClickListener click = new OnClickListener(){
   public void onClick(View v){
      switch(v.getId()){
      case R.id.button1: b1.setText("Button 1 geklickt!");
      case R.id.button2: b2.setText("Button 2 geklickt!");
      }
   }
}

Zusätzlich müsstest du nun (glaub ich) b1 und b2 als final deklarieren.
 
Ich glaube ich habe jetzt einen Weg gefunden. Ich teste mal eben ob alles so läuft wie ich es mir Wünsche.

Sag mal Fr4gg0r kommst du aus Bremen??
 
Zuletzt bearbeitet:
So das ganze sieht jetzt so aus:

Code:
private OnClickListener btnListener = new OnClickListener()
    {
        public void onClick(View v) {                        
               switch(v.getId()) {
               case R.id.Button01:changeButton(R.id.Button01); break;
               case R.id.Button02:changeButton(R.id.Button02); break;
               case R.id.Button03:changeButton(R.id.Button03); break;
               case R.id.Button04:changeButton(R.id.Button04); break;
               case R.id.Button05:changeButton(R.id.Button05); break;
               case R.id.Button06:changeButton(R.id.Button06); break;
               case R.id.Button07:changeButton(R.id.Button07); break;
               case R.id.Button08:changeButton(R.id.Button08); break;
               case R.id.Button09:changeButton(R.id.Button09); break;
               }
        }
    };
und noch die Methode changeButton

Code:
private void changeButton(int buttonid) {
        Button button = (Button)findViewById(buttonid);
        
        if (turn == true) {
            button.setText("X");
            turn = false;
        }else {
            button.setText("O");
            turn = true;
        }
        button.setClickable(false);
    }
Es ist vieleicht nich die eleganteste Lösung, aber ich wollte damit heute einfach nur rumspielen und ma schaun mir das ganze gefällt. :p
 
warum gibst du nicht dem button als id eine eine zahl von 0-9

dann kannst du im onclicklistener

changeButton(v.getID()) machen und schon sparst du dir einige zeilen :)
 
warum gibst du nicht dem button als id eine eine zahl von 0-9

dann kannst du im onclicklistener

changeButton(v.getID()) machen und schon sparst du dir einige zeilen :)
wenn ich dich richtig verstanden habe dann meinst du das so oder??
Code:
public void onClick(View v) {                        
               switch(v.getId()) {
               case R.id.1:changeButton(R.id.1); break;
               case R.id.2:changeButton(R.id.2); break;
               case R.id.3:changeButton(R.id.3); break;
               case R.id.4:changeButton(R.id.4); break;
               case R.id.5:changeButton(R.id.5); break;
               case R.id.6:changeButton(R.id.6); break;
               case R.id.7:changeButton(R.id.7); break;
               case R.id.8:changeButton(R.id.8); break;
               case R.id.9:changeButton(R.id.9); break;
               }
        }
ahso, dachte wegen Abi Bemen in deiner Signatur :p
 

Ähnliche Themen

A
  • AnimaAngelo85
Antworten
1
Aufrufe
332
swa00
swa00
A
Antworten
1
Aufrufe
582
swa00
swa00
SpeedySix
Antworten
13
Aufrufe
1.398
jogimuc
J
Zurück
Oben Unten