1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Frage zu Buttons

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von cz3kit, 13.04.2010.

  1. cz3kit, 13.04.2010 #1
    cz3kit

    cz3kit Threadstarter Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    0
    Registriert seit:
    13.04.2010
    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
     
  2. Fr4gg0r, 13.04.2010 #2
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    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: 13.04.2010
  3. cz3kit, 13.04.2010 #3
    cz3kit

    cz3kit Threadstarter Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    0
    Registriert seit:
    13.04.2010
    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?
     
  4. Fr4gg0r, 13.04.2010 #4
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    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.
     
  5. cz3kit, 13.04.2010 #5
    cz3kit

    cz3kit Threadstarter Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    0
    Registriert seit:
    13.04.2010
    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.
     
  6. Fr4gg0r, 13.04.2010 #6
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    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.
     
  7. cz3kit, 13.04.2010 #7
    cz3kit

    cz3kit Threadstarter Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    0
    Registriert seit:
    13.04.2010
    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: 13.04.2010
  8. cz3kit, 13.04.2010 #8
    cz3kit

    cz3kit Threadstarter Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    0
    Registriert seit:
    13.04.2010
    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
     
  9. swordi, 13.04.2010 #9
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    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 :)
     
  10. Fr4gg0r, 13.04.2010 #10
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009

    Nee^^
    .........
     
  11. cz3kit, 14.04.2010 #11
    cz3kit

    cz3kit Threadstarter Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    0
    Registriert seit:
    13.04.2010
    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
     

Diese Seite empfehlen