2016-04-19 7 views
1

Ich habe derzeit 8 ImageButtons eingerichtet mit IDs imageButton1 zu imageButton8.Android Studio: Iterieren durch Bilder in Zeichen für onClick imageButton

Wenn ich auf eine bestimmte Schaltfläche (z. B. imageButton2) klicke, möchte ich meine Bilder im ausklappbaren Ordner image1 .... image10 durchlaufen und das Bild für jeden Klick auf imageButton setzen.

Ich habe an verschiedenen gesucht Schleifen dieses Problem zu lösen, aber es haben sie nichts geführt. Hier ist ein Ausschnitt einer for-Schleife Versuch:
AKTUALISIERT 26/4/16
GELÖST

//UPDATED 25/4/16 
ImageButton btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8; 
ImageButton[] btns; 
int[] drawables = new int[]{R.drawable.image1,R.drawable.image2,R.drawable.image3,R.drawable.image4,R.drawable.image5,R.drawable.image6,R.drawable.image7,R.drawable.image8}; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 

    btn1 = (ImageButton) findViewById(R.id.imageButton1); 
    btn2 = (ImageButton) findViewById(R.id.imageButton2); 
    btn3 = (ImageButton) findViewById(R.id.imageButton3); 
    btn4 = (ImageButton) findViewById(R.id.imageButton4); 
    btn5 = (ImageButton) findViewById(R.id.imageButton5); 
    btn6 = (ImageButton) findViewById(R.id.imageButton6); 
    btn7 = (ImageButton) findViewById(R.id.imageButton7); 
    btn8 = (ImageButton) findViewById(R.id.imageButton8); 

     btn1.setOnClickListener(this); 
     btn2.setOnClickListener(this); 
     btn3.setOnClickListener(this); 
     btn4.setOnClickListener(this); 
     btn5.setOnClickListener(this); 
     btn6.setOnClickListener(this); 
     btn7.setOnClickListener(this); 
     btn8.setOnClickListener(this); 
} 


btns = new ImageButton[]{btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8}; 
} 

int counter = 0; 
     @Override 
    public void onClick(View v) 
     { 

      counter ++; 


      for (int i = 0; i < btns.length; i++) 
      { 


       if (v.getId() == btns[i].getId()) 
       { 
        if(counter ==8) 
        { 
         counter =0; 
        } 

         ((ImageButton)v).setImageResource(drawables[counter]); 

       } 

      } 
} 
} 

AKTUALISIERT 26/4/16

GELÖST

Ein weiterer Versuch war ein erstellen counter, um die Anzahl der Klicks zu speichern und if-Anweisungen festzulegen, um die Bilder nach jedem Klick zu ändern.

Das Problem hier war, dass es eine riesige Menge an Code erstellt, wenn ich mehrere Tasten habe.

Darüber hinaus, wenn ich dies auf zwei verschiedene Tasten ausführen, einmal tippe ich auf imageButton1 ein paar Mal, dann imageButton2 ein paar Mal, reagiert imageButton1 nicht mehr.

int counter =0; 

     @Override 
    public void onClick(View v) 
     { 
      counter++; 


      switch(v.getId()) 
      { 
       case R.id.imageButton1: 
        if(counter == 1){ 

         ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
         btn1.setImageResource(R.drawable.image1); 
         break; 

        }else if (counter == 2){ 

         ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
         btn1.setImageResource(R.drawable.image2); 
         break; 

        }else if (counter == 3){ 

         ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
         btn1.setImageResource(R.drawable.image3); 

         break; 

        }else if (counter == 4){ 

         ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
         btn1.setImageResource(R.drawable.image4); 

         break; 
        }else if (counter == 5){ 

         ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
         btn1.setImageResource(R.drawable.image5); 
         break; 

        }else if (counter == 6){ 

         ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
         btn1.setImageResource(R.drawable.image6); 

         break; 

        }else if (counter == 7){ 

         ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
         btn1.setImageResource(R.drawable.image7); 

         break; 
        }else if (counter == 8){ 

         ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
         btn1.setImageResource(R.drawable.image8); 
         break; 

        }else if (counter == 9){ 

         ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
         btn1.setImageResource(R.drawable.image9); 

         break; 

        }else if (counter == 10) { 

         ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
         btn1.setImageResource(R.drawable.image10); 
         counter = 0; 
         break; 
        } 
        break; 

Ich würde jede Anleitung schätzen, währenddessen, wenn ich dieses Problem löse, werde ich einen Edit repost. Prost

Antwort

0

nur ein Vorschlag.

Vielleicht könnten Sie die Tasten und Bildressourcen als Arrays dann Schleife durch sie erklären.

Zum Beispiel:

public class Sample extends Activity { 

    ImageButton btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8; 
    ImageButton[] btns; 
    int[] drawables = new int[]{R.drawable.imageButton1,R.drawable.imageButton2,R.drawable.imageButton3,R.drawable.imageButton4,R.drawable.imageButton5,R.drawable.imageButton6,R.drawable.imageButton7,R.drawable.imageButton8}; 
    int[] origDrawables = new int[]{R.drawable.imageOrigButton1,R.drawable.imageOrigButton2,R.drawable.imageOrigButton3,R.drawable.imageOrigButton4,R.drawable.imageOrigButton5,R.drawable.imageOrigButton6,R.drawable.imageOrigButton7,R.drawable.imageOrigButton8}; 

    @Override 
    public void onCreate(Bundle saveInstanceState) { 
    btn1 = (ImageButton) findViewById(R.id.imageButton1); 
    btn2 = (ImageButton) findViewById(R.id.imageButton2); 
    btn3 = (ImageButton) findViewById(R.id.imageButton3); 
    btn4 = (ImageButton) findViewById(R.id.imageButton4); 
    btn5 = (ImageButton) findViewById(R.id.imageButton5); 
    btn6 = (ImageButton) findViewById(R.id.imageButton6); 
    btn7 = (ImageButton) findViewById(R.id.imageButton7); 
    btn8 = (ImageButton) findViewById(R.id.imageButton8); 

    btn1.setOnClickListener(this); 
    btn2.setOnClickListener(this); 
    btn3.setOnClickListener(this); 
    btn4.setOnClickListener(this); 
    btn5.setOnClickListener(this); 
    btn6.setOnClickListener(this); 
    btn7.setOnClickListener(this); 
    btn8.setOnClickListener(this); 

    btns = new ImageButton[]{btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8}; 
    } 

    @Override 
    public void onClick(View v) { 
    for (int i = 0; i < btns.length; i++) { 
     if (v.getId == btns[i].getId) { 
     ((ImageButton)v).setImageResource(drawables[i]); 
     } else { 
     ((ImageButton)v).setImageResource(origDrawables[i]); 
     } 
    } 
    } 

} 

HINWEIS: Verzeihen alle Code-/Syntaxfehler, wie ich dies mit Notizblock tat.

+0

habe ich versucht, so etwas wie dies vor, aber ein Fehler Anzeige erscheint, kann nicht „setImageResource (int)“ lösen – Steven

+0

aktualisiert meine Antwort . Kannst du es jetzt versuchen? – ank

+0

Meine Antwort wurde mit "((ImageButton) v) .setImageResource (drawables [i]);" aktualisiert. Ich denke, der Grund für den Fehler "Kann nicht aufgelöst werden" ist, weil das View-Objekt es nicht hat. Daher müssen wir es möglicherweise in ImageButton umwandeln, um die Methode zu erhalten. – ank

-1

Versuchen Sie, diese

int counter = 1; 
    @Override 
    public void onClick(View v) 
    { 
     switch(v.getId()) 
     { 
      case R.id.imageButton1: 
      ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
       if(counter == 1){ 
        btn1.setImageResource(R.drawable.image1); 
       }else if (counter == 2){ 
        btn1.setImageResource(R.drawable.image2); 
       }else if (counter == 3){ 
        btn1.setImageResource(R.drawable.image3); 
       }else if (counter == 4){ 
        btn1.setImageResource(R.drawable.image4); 
       }else if (counter == 5){ 
        btn1.setImageResource(R.drawable.image5); 
       }else if (counter == 6){ 
        btn1.setImageResource(R.drawable.image6); 
       }else if (counter == 7){ 
        btn1.setImageResource(R.drawable.image7); 
       }else if (counter == 8){ 
        btn1.setImageResource(R.drawable.image8); 
       }else if (counter == 9){ 
        btn1.setImageResource(R.drawable.image9); 
       }else if (counter == 10) { 
        btn1.setImageResource(R.drawable.image10); 
       } 

      counter = (counter % 10) + 1 ; 
       break; 
    } 
+0

?? Du tust es falsch ... Es ist falsch, all diese 'if ... else' im Schalter zu haben. Überprüfen Sie die Schaltfläche mit einem "if" zuerst, dann legen Sie den Schalter hinein. – CaptJak

+0

@CaptJak Ist das ein Problem? Warum kann ich 'if..else' nicht innerhalb' switch' setzen? – jgm

+0

Es ist möglich, das zu tun, es wird funktionieren, aber wenn Sie es so machen, warum benutzen Sie den Schalter? Warum benutzt du 'if ... else'? Warum benutzt du nicht einfach das eine oder das andere? Aus Leistungsgründen sollten Sie einen Schalter verwenden. Siehe: https://stackoverflow.com/questions/6705955/why-switch-is-faster-than-if – CaptJak