# Android Studio: Einen Button in einer For Schleife verwenden



## tmo0107 (14. Dez 2021)

Ich habe eine Klasse "Manager", die zwei Werte übergibt. Einmal den Integer "mode" und den String "description" 

```
public class Manager  {

    public int mode;
    public String description;


    public Manager(int mode, String description) {
        this.mode = mode;
        this.description = description;

    }
}
```
Diese Daten werden dann an die Methode "description" übergeben. Die Methode enthält eine Arrayliste mit dem Namen "test":


```
public ArrayList<Manager> description() {
    ArrayList<Manager> test = new ArrayList<>();
    test.add(new Manager(1,"Test 1"));
    test.add(new Manager(2,"Test 2"));
    test.add(new Manager(3, "Test 3"));
    shuffle(test);
    return test;
}
```
In der Methode "print", wird über die ArrayList iteriert. Je nachdem, welcher Modus übergeben wird, wird in der TextView etwas anderes ausgegeben.

```
public void print(List<Manager>test) {
    for(Manager i : test) {
        if(i.mode == 1) {
            descriptions.setText("Mode 1 " + i.description);
        } else if(i.mode == 2) {
            descriptions.setText("Mode 2 " + i.description);
        } else if(i.mode == 3D) {
            descriptions.setText(("Mode 3 " + i.description));
        }
    }
}
```
Jetzt will ich einen Button verwenden, um nach jedem Klick ein zufälliges Element aus der Array-Liste auszugeben, bis alle Elemente ausgegeben wurden oder bis die Schleife beendet ist. 
Bislang habe ich eine buttonClicked-Methode, die nach jedem Klick die "print"-Methode aufruft. Aber hier wird die Methode nach jedem Klick neu gestartet. 

```
public void buttonClicked(View view) {
            print(description());
            //printDrink(description(), inputPlayernames());

    }
```
Wie kann ich den Button in der Schleife so verwenden, dass ich jedes Element nur einmal nach jedem Klick erhalte, bis die Schleife beendet ist?


----------



## Jw456 (15. Dez 2021)

Mit einer for Schleife wie du es willst nicht.
Eigentlich bist du mit deinem Button ja selbst die Schleife.
Du könntest zb eine Instanzvariable benutzen die dann als schleifen variable fungiert. Also beim Button klick prüft du in dem listener ob das Ende des Arrays erreicht ist wenn nein erhöht du die Variable und rufst dein print auf.
Das for in der print Methode brauchst du nun nicht mehr.
Den Wert der laufvariablen könntest du auch der print Methode übergeben.
Oder das prüfen machst du in der print Methode. Ist dir überlassen.



Du bist ja jetzt die for Schleife.


----------



## Robertop (15. Dez 2021)

Wie @Jw456 schon sagt, ist die For Schleife hier nicht die richtige Wahl, weil du ja im Prinzip mit deinem Button-Click selbst die Schleife bist. So, wie es momentan ist, wird bei jedem Klick auf den Button die For Schleife ausgeführt, also die Liste  komplett durchgegangen. Statt der For-Schleife müsstest du eine Variable definieren, die jeden Click mitzählt und den entsprechenden Listeneintrag mit "print" ausgibt.

Allerdings wirst du dann auf das Problem stoßen, dass du gerade noch bei jedem Button-Click die "description()" Methode aufrufst, die ja jedes Mal eine neue Liste erzeugt und diese mischt (falls shuffle das tut, was ich denke). Die description Methode darfst du also eigentlich nicht erst beim Click auf den Button ausführen, oder wenn, dann nur beim ersten Mal.


----------

