Folgende Situation:Warten Sie auf 2 Klickereignisse, bis der Vorgang nicht funktioniert.
Ich programmiere ein Domino-Spiel für Android. Zu Beginn des Spiels, wenn kein Bot der Startspieler ist, sollte ein Benutzer zwei Dominos auswählen, die auf das Brett kommen.
Überblick über meine Nicht-Arbeitsansatz:
Definition eines leeren Arraylist, Aufruf einer Funktion, die Click Hörer auf jedem Domino gehören dem Benutzer durch eine while-Schleife gefolgt legt, die nichts tut, sollte nur sein, die Mechanismus, um zu warten, bis der Benutzer zwei Dominos ausgewählt hat. Dieser domino soll in der Arraylist (Zugabe des dominos zu der Arraylist in FirstDominosPickerListener)
Der Code
In der Aktivität gelagert werden:
ArrayList<Domino> starterDominos = new ArrayList<Domino>();
startingPlayer.chooseStartDominos(starterDominos);
die Funktion:
public void chooseStartDominos(ArrayList<Domino> starterDominos){
///Every Domino gets a ClickListener
for (Domino domino : playerSet){
domino.setOnClickListener(new FirstDominosPickerListener(starterDominos));
}
//The idea is to wait until the user has picked two Dominos. With that loop, no UI at all shows up
while (starterDominos.size()<2){
Log.v(LOG_TAG," WAIT!!!!");
}
}
Das Problem ist die while-Schleife. Mit der Schleife wird keine Benutzeroberfläche angezeigt, ich bekomme einen leeren weißen Bildschirm, obwohl der Code läuft. In Logcat bekomme ich unendliche "Wait" -Meldungen. Keine Ahnung warum.
Ein zweiter Ansatz, den ich versucht habe, war ein Timer-Task in der Tätigkeit rufen danach überprüft, ob zwei Dominos (durch die Größe der Liste) starterDominos = startingPlayer.chooseStartDominos(starterDominos);
gepflückt wurden erkennen ich, dass nicht, weil das könnte funktionieren läuft in einem anderen Thread und deshalb war es nicht möglich, auf einen Teil der Benutzeroberfläche zuzugreifen. Aber der Mechanismus zur Auswahl der Dominos hat funktioniert. UI zeigte sich und run()
endete, nachdem zwei Dominos durch cancel()
ausgewählt wurden.
Warum führt die while-Schleife zu diesem Verhalten? Ist der ganze Ansatz falsch und wenn ja, was kann ich tun, dass die App wartet, bis die Dominos ausgewählt wurden und dann fortfahren
Ich könnte vorschlagen, dass Sie ein paar Android-Tutorials durcharbeiten, bevor Sie tauchen. Ich will nicht übermäßig kritisch sein, aber Ihr Code zeigt einen ziemlich grundlegenden Mangel an Wissen darüber, wie Android-Apps funktionieren. – JJF
Ich habe Tutorials gemacht. Kannst du konkreter sein? – Reinmarius
Sie sollten verstehen * warum * die Antwort unter RE Haupt Thread blockiert ist korrekt. Weißt du, was der Hauptthread ist? Weißt du, warum du den Hauptfaden nicht blockieren kannst? Weißt du, was es bedeutet, einen Thread zu blockieren? Weißt du was ein Thread ist? Diese Art von Dingen. – JJF