Android findViewById loop

findviewbyid

Wie vorgehen, wenn man viele Objekte (Buttons, EditText etc.) aus dem Layout in seinem Code initialisieren und eine Referenz auf die Ressourcen bilden muss? Das ständige copy & paste von findViewById ist nicht nur nervig, sondern verringert zudem die Lesbarkeit des Codes, verschlechtert somit die Wartbarkeit und erhöht die Fehleranfälligkeit. Deswegen erkläre ich dir, wie man eine einfache Schleife für die Referenz bildet.

Und so benutzt man findViewById in einer For-Schleife

1.) Zuerst deklariert man ein Array von Objekten, in diesem Beispiel benutze ich Buttons und möchte insgesamt 6 Stück davon haben. Anschließend folgt auch schon die Schleife, die nach der Anzahl an Objekten ausgeführt wird.

2.) Danach speichern wird uns in einem String die ID der Buttons, die wir in unserem XML Layout vergeben haben. Durch die Variable i wird nach jedem Durchlauf unser Ende der ID um eins erhöht, wobei wir hier direkt bei der Nummer eins anfangen.

3.) Dann bilden wir die Referenz auf die Ressourcen. Dies ist das Pendant zum Inhalt der Klammer von findViewById(R.id.beispiel).

4.) Zu guter Letzt liefert uns findViewById den Zugriff auf das Oberflächenelement aus dem XML Layout.

Kommentare(2)

  1. Dominik Borowski schreibt

    Ich habe das Problem das die drauf verlegten aufgaben nicht mehr funktionieren

    public void onClick(View v){

    if (v == btn1){

    playchecker(mp);

    mp = MediaPlayer.create(getApplicationContext(), R.raw.lindseyduck);
    mp.start();

    }

    Wie krieg ich hin das der code der Buttons trotzdem ausgeführt wird

    • David schreibt

      Hi Dominik,

      wenn du deine Buttons wie oben beschrieben angelegt und initialisiert hast, dann kannst du in der onClick() Methode durch eine for-Schleife die Aktion des Clickevents beschreiben. So wird für jeden Button das gleiche onClick Event hinzugefügt.

      for(int i = 0; i < button.length; i++) {
      String button_personID = “button” + (i + 1);

      int resID = getResources().getIdentifier(button_ID, “id”, getPackageName());

      if(resID == v.getId()) {
      // ToDo
      }
      }

Schreibe ein Kommentar

Book your tickets