XML-Daten in eine ListView einlesen

  • Vllt reden wir auch ein bissl aneinander vorbei. Also ich meine es genauso wie die App zeigt, also der Link, den ich gepostet habe. Der User öffnet die App und es kommen direkt Nachrichten rein die aber einen 2 Sekunden Abstand haben DAS möchte ich einbauen. Warum? Weil der Spieler ja nicht so schnell lesen kann das eine Textbox bis zur anderen bis zur Entscheidung erscheint. Verstehst du was ich meine?

  • Jop, bekomme ich bestimmt hin. Aber wo ich mir jetzt die Zähne kaputt beiße ist diese Verzögerung. Wie kann man eine einfache Verzögerung einbauen? Habe einige Möglichkeiten ausprobiert, aber es hat entwender nicht funktioniert oder es war ellenlanger Code, das kann ich mir nicht vorstellen dass es so lange dauert? Gibt es nicht sowas wie eine pause() Funktion mit Millisekundenwert als Parameter?

  • Bin gerade an einer Lösung dran, die nicht funktioniert und ich nicht verstehe warum. Also habe hier mein onBindViewHolder, der die Textboxen auf dem Bildschirm erscheinen lässt. Jedes mal, wenn er eine Textbox erstellt hat, soll eine 5 sekündige Pause eingelegt werden, bis das nächste erscheint. Habe das so gelöst:



    DerTimer() wird dann aufgerufen mit diesem Code:


    Wenn ich die App starte, dann bekomme ich sofort alle Einträge ohne Verzögerung angezeigt, warum?

  • Das geht für diesen Anwendungsfall nicht.


    Du möchtest das dein MainThread 5s wartet und dann weiterarbeitet. Was du aber mit dem Timer bezweckst ist, einen zweiten Thread parallel zu deinem MainThread zu betreiben, der nach 5s irgendwas tut. Das heißt beide Threads laufen einfach weiter, der Timer startet aber halt erst nach 5s.


    in der onBindViewHolder Methode kannst du ein Thread.sleep() aufrufen, das sollte den zweck erfüllen. Aber mir stellt sich die Frage, warum du das möchtest. Ich dachte du willst nach 5 sekunden ein neues Item zu deiner Liste hinzufügen und nicht aller 5s den Text deiner TextView ändern.

  • So, Erfolg!


    Habe einen RecyclerView, mit ArrayList, und diese Liste wird bestückt. Wenn ich Thread.sleep() anwende, und bspw. 1000 Millisekunden eintrage, dann laggt das ganze und ich habe so 8 Sekunden einen eingefrorenen Bildschirm dann wird auf einmal alles angezeigt. Ist glaube ich nicht so elegant.


    Nächste Frage: Wenn ich jetzt Entscheidungen einbauen will, mein Vorschlag. Habe ja ein String Array mit dem ganzen Text drin (jeder Satz ist indexiert). Am besten wäre es doch jetzt eine for-Schleife zu erstellen, die bis zum Index 3 läuft. So werden die ersten 3 Sätze angezeigt. Jetzt kommt eine Entscheidung, die linke Entscheidung bekommt den Stringindex 4 und die Rechte Index 5. Wenn jetzt jmd links drückt, dann springt man weiter zu Index 6, bei rechts zu Index 12.


    Muss man das im Adapater realisieren?

  • Jo stimmt, könnte ich noch ändern bzw. werde ich auch noch ändern aber mir ist erstmal wichtig, die Grundfunktionen hinzubekommen, besonders das Entscheidungszeug und diese Verzögerung. Das Datebankzeugs ist ja einfacher.


    Könntest Du noch was zu meiner Idee sagen?

  • naja die idee mit der for schleife würde dann halt entfallen. du könntest in der datenbank z.b. für jede frage zwei spalten extra einplanen. Eine für den einen entscheidungszweig und eine für den anderen. In die jeweiligen entscheidungszweige packst du dann einfach die ids der jeweiligen textbausteine rein.


    Kurz:
    2 Tabellen, eine für die textbausteine und eine für die verbindungen der einzelnen bausteine.


    Wenn du mit Android ressourcen arbeitest statt einer Datenbank, brauchst du nur eine Tabelle für die Entscheidungen. Dort kannst du die Ressource IDs vernetzen. Das würde ich aber nicht empfehlen, denn falls sich eine Ressource ID mal ändert, ist die referenzielle intigrität deiner datenbank nicht mehr gesichert und die vernetzung der textbausteine könnte kaputt gehen.

  • Eine Verständnisfrage. Ich habe jetzt die Datenbank mit zwei Tabellen erstellt. Aber wie bekomme ich jetzt meine Daten darein? Ich kann in der MainActivity ja ein "myDB.insertData(STRING)" aufrufen und dann bin ich aber wieder bei meinem Array und einer for-Schleife bis alle Daten in die DB eingelesen wurden oder liege ich ganz falsch?? Kann ich nicht manuell wie in Microsoft Access die Daten eingeben und so die Datenbank dann aufrufen?


    Dankee

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!