Hallo Leute!
Ich habe mich an folgendem versucht:
Vokabelquiz erstellen mit 6 Antwortmöglichkeiten.
Kurzbeschreibung:
Richtige Vokabelpaare (n Paare) sind in Array gespeichert,
z.B.: verb (deutsch) = verbArr[n][0], verb (fremdsprache) = verbArr [n][1]
Ein zweites Array enthält den Platz der richtigen Antwort (zahlen 1 bis 6 wird jedem Button zugeordnet, 1==richtig, 2-6==falsch)
Dieses Array enthält alle möglichen 720 Permutationen der Zahlen 1 bis 6. => numArr [720][6].
Z.B:
numArr [2][0]=3
numArr [2][1]=4
numArr [2][2]=1
numArr [2][3]=5
numArr [2][4]=6
numArr [2][5]=2
Für das 3. Vokabelpaar liegt der richtige Wert somit am 3. Button.
Zu erratender Begriff ist immer der nächste Index w -> verbArr [w][0]
1 Button erhält (siehe numArray) = verbArr [w][1] = richtigen Werten, andere 5 Buttons erhalten zufällige Werte aus einem Teilbereich der Gesamtmenge (wobei immer nur jener Teil dafür herangezogen wird, wo nicht das richtige i liegt).
Folgende Problemstellung:
Ich habe eine for-Schleife aufgesetzt, welche das Ziel haben sollte nach jedem Schleifendurchlauf folgendes zu tun:
- Buttons einfärben (grün-richtig / rot-falsch) je nach gegebener Antwort
- Schleifendurchlauf für 500ms unterbrechen über Thread.sleep().
- Buttons auf Standardfarbe weiß zurückfärben und Buttons mit neuen Begriffen hinterlegen
- Buttons über setText mit neuen Werten belegen (das habe ich nicht mehr versucht einzubauen)
Aber:
Die for-Schleife läuft alle 720 Schleifendurchläufe durch und ändert anschließend das UI einmalig ab.
(Schleife wartet nicht auf Click, sondern rennt einfach durch). Habe versucht mir den aktuellen index über setText auf den 6. Button darzustellen und mir wurde
immer der letzte Arraywert angezeigt).
Thread.sleep(ms: 500) hilft auch nicht -> Programm macht dann einmalig 500ms * 720 Pause und friert das UI für diesen Zeitraum.
Ziel wäre gewesen 500ms warten -> UI Buttons zurückfärben -> auf Buttonclick warten -> UI Buttons rot/grün -> 500ms Pause etc.
Sodass die Änderung im UI schrittweise passiert.
Bei stackoverflow habe ich bei einem ähnlichen Problem gelesen:

Ich gehe davon aus, dass das unterbrechen und der spätere restart der for-Schleife per Buttonclick somit nur bedingt möglich ist und einen ganz anderen Lösungsansatz braucht?
Unten findet ihr den betreffenden Code-Ausschnitt:
Freu mich über alle Anregungen.
Liebe Grüße
Ich habe mich an folgendem versucht:
Vokabelquiz erstellen mit 6 Antwortmöglichkeiten.
Kurzbeschreibung:
Richtige Vokabelpaare (n Paare) sind in Array gespeichert,
z.B.: verb (deutsch) = verbArr[n][0], verb (fremdsprache) = verbArr [n][1]
Ein zweites Array enthält den Platz der richtigen Antwort (zahlen 1 bis 6 wird jedem Button zugeordnet, 1==richtig, 2-6==falsch)
Dieses Array enthält alle möglichen 720 Permutationen der Zahlen 1 bis 6. => numArr [720][6].
Z.B:
numArr [2][0]=3
numArr [2][1]=4
numArr [2][2]=1
numArr [2][3]=5
numArr [2][4]=6
numArr [2][5]=2
Für das 3. Vokabelpaar liegt der richtige Wert somit am 3. Button.
Zu erratender Begriff ist immer der nächste Index w -> verbArr [w][0]
1 Button erhält (siehe numArray) = verbArr [w][1] = richtigen Werten, andere 5 Buttons erhalten zufällige Werte aus einem Teilbereich der Gesamtmenge (wobei immer nur jener Teil dafür herangezogen wird, wo nicht das richtige i liegt).
Folgende Problemstellung:
Ich habe eine for-Schleife aufgesetzt, welche das Ziel haben sollte nach jedem Schleifendurchlauf folgendes zu tun:
- Buttons einfärben (grün-richtig / rot-falsch) je nach gegebener Antwort
- Schleifendurchlauf für 500ms unterbrechen über Thread.sleep().
- Buttons auf Standardfarbe weiß zurückfärben und Buttons mit neuen Begriffen hinterlegen
- Buttons über setText mit neuen Werten belegen (das habe ich nicht mehr versucht einzubauen)
Aber:
Die for-Schleife läuft alle 720 Schleifendurchläufe durch und ändert anschließend das UI einmalig ab.
(Schleife wartet nicht auf Click, sondern rennt einfach durch). Habe versucht mir den aktuellen index über setText auf den 6. Button darzustellen und mir wurde
immer der letzte Arraywert angezeigt).
Thread.sleep(ms: 500) hilft auch nicht -> Programm macht dann einmalig 500ms * 720 Pause und friert das UI für diesen Zeitraum.
Ziel wäre gewesen 500ms warten -> UI Buttons zurückfärben -> auf Buttonclick warten -> UI Buttons rot/grün -> 500ms Pause etc.
Sodass die Änderung im UI schrittweise passiert.
Bei stackoverflow habe ich bei einem ähnlichen Problem gelesen:

Ich gehe davon aus, dass das unterbrechen und der spätere restart der for-Schleife per Buttonclick somit nur bedingt möglich ist und einen ganz anderen Lösungsansatz braucht?
Unten findet ihr den betreffenden Code-Ausschnitt:
Java:
....
private void threadCatcher(){
try {
Thread.sleep(500);
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
}
}
//
button_weiter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
button_verb1.setOnClickListener(this);
button_verb2.setOnClickListener(this);
button_verb3.setOnClickListener(this);
button_verb4.setOnClickListener(this);
button_verb5.setOnClickListener(this);
button_verb6.setOnClickListener(this);
for (int w = 0; w<720; w++){
if(numArr[w][0]==1){
switch (view.getId()) {
case R.id.button_verb1:
button_verb1.setBackground(getResources().getDrawable(R.drawable.my_button_main_true));
threadCatcher();
button_verb6.setText(String.valueOf(w));
case R.id.button_verb2:
button_verb1.setBackground(getResources().getDrawable(R.drawable.my_button_main_true));
button_verb2.setBackground(getResources().getDrawable(R.drawable.my_button_main_false));
threadCatcher();
button_verb6.setText(String.valueOf(w));
case R.id.button_verb3:
button_verb1.setBackground(getResources().getDrawable(R.drawable.my_button_main_true));
button_verb3.setBackground(getResources().getDrawable(R.drawable.my_button_main_false));
threadCatcher();
button_verb6.setText(String.valueOf(w));
case R.id.button_verb4:
button_verb1.setBackground(getResources().getDrawable(R.drawable.my_button_main_true));
button_verb4.setBackground(getResources().getDrawable(R.drawable.my_button_main_false));
threadCatcher();
button_verb6.setText(String.valueOf(w));
case R.id.button_verb5:
button_verb1.setBackground(getResources().getDrawable(R.drawable.my_button_main_true));
button_verb5.setBackground(getResources().getDrawable(R.drawable.my_button_main_false));
threadCatcher();
button_verb6.setText(String.valueOf(w));
case R.id.button_verb6:
button_verb1.setBackground(getResources().getDrawable(R.drawable.my_button_main_true));
button_verb6.setBackground(getResources().getDrawable(R.drawable.my_button_main_false));
threadCatcher();
button_verb6.setText(String.valueOf(w));
}}
else if(shuffleNumArr[w][0]==2){
switch (view.getId()) {
case R.id.button_verb1:
button_verb1.setBackground(getResources().getDrawable(R.drawable.my_button_main_false));
button_verb2.setBackground(getResources().getDrawable(R.drawable.my_button_main_true));
threadCatcher();
button_verb6.setText(String.valueOf(w));
case R.id.button_verb2:
button_verb2.setBackground(getResources().getDrawable(R.drawable.my_button_main_true));
threadCatcher();
button_verb6.setText(String.valueOf(w));
case R.id.button_verb3:
button_verb2.setBackground(getResources().getDrawable(R.drawable.my_button_main_true));
button_verb3.setBackground(getResources().getDrawable(R.drawable.my_button_main_false));
threadCatcher();
button_verb6.setText(String.valueOf(w));
case R.id.button_verb4:
button_verb2.setBackground(getResources().getDrawable(R.drawable.my_button_main_true));
button_verb4.setBackground(getResources().getDrawable(R.drawable.my_button_main_false));
threadCatcher();
button_verb6.setText(String.valueOf(w));
case R.id.button_verb5:
button_verb2.setBackground(getResources().getDrawable(R.drawable.my_button_main_true));
button_verb5.setBackground(getResources().getDrawable(R.drawable.my_button_main_false));
threadCatcher();
button_verb6.setText(String.valueOf(w));
case R.id.button_verb6:
button_verb2.setBackground(getResources().getDrawable(R.drawable.my_button_main_true));
button_verb6.setBackground(getResources().getDrawable(R.drawable.my_button_main_false));
threadCatcher();
button_verb6.setText(String.valueOf(w));
}}
// ETC weiter so für alle 6 Buttons
Freu mich über alle Anregungen.
Liebe Grüße