XML-Daten in eine ListView einlesen

  • Hallo,


    ich habe eine ListView erstellt, und diese enthält Strings, die ich hart in den Code geschrieben habe:



    Java
    String[] myItems = {text1, text2, text3, text4, text5, text6, text7, text8, text9};

    Diese werden mir angezeigt, so wie es soll. Jetzt möchte ich aber, dass anstelle von text1 ein Text aus einem XML-File ausglesen wird. Ist das simpel möglich?


    Mein Ziel ist es, ListView Items nacheinander anzeigen zu lassen (nach ca. 3 Sekunden Intervall). Diese ListViews enthalten eben Text der ja irgendwo herkommen soll und das ist sooo viel Text, dass ich das nicht alles in den Quelltext reinschreiben will.


    Ist ListView überhaupt das richtige Mittel dafür?

  • hallöchen :)


    die Listview ist das richtige werkzeug, schließlich möchtest du eine liste von strings anzeigen. Dein gedankengang ist auch etwas auf umwege geraten. Warum muss der text in einem xml file oder allgemein irgendwo in einem file gespeichert sein? Warum rufst du ihn nicht einfach aus dem internet ab und speicherst ihn in der SQL Datenbank der app? Alternativ könntest du statt der SQLite Datenbank der app auch einfach die sharedpreferences benutzen.

  • Habe vor als ein kleines Projekt sowas wie Lifeline zu programmieren das ja sehr einfach aussieht. Nur frage ich mich, was die beste Lösung ist. Es geht ja darum einfach nach einer Zeit x sämtliche Dialoge (die vermutlich aus Bildern bestehen) anzuzeigen und nachdem die Datentabelle mit den Bildern leer ist, kommt eine Auswahl mit zwei Entscheidungen. Entscheidung 1 ruft die Datentabelle mit den Bildern auf, Entscheidung 2 die andere eben etc. Oder sehe ich das falsch? :)

  • Am einfachsten ist es, wenn du dir kurz das Video anschaust. Das sind alle Funktionen, die das "Spiel" enthält und das möchte ich nachbauen :) Ist das sehr schwer bzw. auswendig?


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

  • jetzt versteh ich erst was du machen möchtest. Ich dachte die ganze zeit dass du in die listview kleine grafiken einfügen willst. Aber du möchtest das aussehen der Listview komplett ändern.
    Dazu empfehle ich dir die RecyclerView mit holder pattern. Da setzt du bei einem Item einfach den background und das item wird dann immer wiederverwendet.

  • Ja primär gehts ja auch darum wie ich den Text darein bekomme. Sind das alles Grafiken oder Text der auf einen einheitlichen Background gesetzt wurde? Grafike wären ja mega speicherlastig. Und wie sieht es aus mit der Logik der Entscheidungen? Wird dann für Weg A eine andere Datenbank aufgerufen als bei Weg B? Steh da noch so aufm Schlauch :)

  • der Hintergrund ist ein Bild und der Text ist Text. Eine einfache TextView. Grafiken wären eigentlich kaum speicherlastig, da du die wiederverwendest. Kommt natürlich drauf an wie groß die sind vom speicherverbrauch, aber in der regel hast du maximal 6 solcher grafiken im speicher denke ich.


    Wozu eine andere Datenbank nutzen? musst doch nur eine neue Datenbank abfrage machen.

  • Danke für deine Antwort.


    Genau, der Rahmen an den Rändern ist ein Backgroundimage, das habe ich verstanden. Dann entstehen ja immer diese Boxen mit Text. Verstehe das so: Der Boxen-Hintergrund ist EIN Bild das immer genutzt wird. Der Text ist als String in einer Datenbank gespeichert, und zwar jeder einzelne.
    Aber: Wenn ich jetzt möchte das 4 Boxen mit unterschiedlichem Text mit ca. 3 Sekunden Verzögerung nach einander angezeigt werden, nutze ich dann ne ListView, GridView oder immer noch den RecyclerView? Wie wird die Logik in Form von zwei Entscheidungsbuttons implementiert? Ich denke: Wenn die Textbox bzw der String mit der bspw. ID 4 aufgerufen wurde, kommt ne Entscheidung. Entscheidng A springt zur ID 5 weiter und B zB zu ID 13. Dann wieder ne Entscheidung etc. Ist die Überlegung realistisch?

  • Sorry aber ich schreibe dir den code nun nicht her. Das ist ein einfaches layout mit einer listview. Dazu gibt es tausend tutorials. Bei problemen helf ich dir gern, aber nicht bei faulheit :P


    Ich geb dir mal stichworte:
    - Recyclerview
    - ViewHolder
    - OnItemClick

  • Noch mal 'ne allgemeine Frage. Wie lange bedarf es ca. bis ein Anfänger diese App geschrieben hat? Komme an bestimmten Stellen nicht weiter und frage mich ob das überhaupt machbar ist. Habe jetzt eine RecyclerView erstellt und diese zeigt mir String Values an, die ich hart gecodet habe. Jetzt möchte ich die Daten von einer Datenbank beziehen, habe ich IRGENDWAS mit diesem JSON zu tuen? Habe das im Zusammenhang mit "bezieht die Daten vom Server" gehört, aber was ist wenn der User offline ist und die App neue Daten benötigt? Was ist wenn der Server offline ist und keine Daten mehr beziehen kann? Oder ist das lokal aufm Gerät?


    Fragen über Fragen :)

  • keine ahnung wielang ein anfänger braucht, das ist von person zu person unterschiedlich und hängt auch davon ab wieviel erfahrung die person allgemein in der programmierung besitzt. Machbar ist es aufjedenfall.


    Also erstmal um daten dynamisch in die recyclerview zu laden brauchst du einen adapter für diese recyclerview. Das ist aber eigentlich in jedem tutorial zu recyclerviews mit erklärt.


    Prinzipiell würde ich so vorgehen, dass du die Daten mit einem Syncadapter (ist wieder ein anderer adapter der aber nichts mit der recyclerview zutun hat) die Daten von einem Server holst. Das geht aber nur wenn a.) der Server erreichbar ist und b.) der User internet aktiviert hat. Sind diese Beiden Aspekte nicht erfüllt, geht es halt einfach nicht Daten zu holen. Da musst du dann einen Standardtext anzeigen. Wenn der Text aber immer der selbe ist, und sich nie verändert, dann kannst du den auch einfach in deiner app mit ausliefern und brauchst den nicht mühevoll von einem server zu laden.

  • Ok, klar ist sehr individuell.


    Genau, in meiner RecyclerView habe ich einen Adapter. Das mit dem Syncadapter wäre gar nichts für mich. Habe mir jetzt mal ein Tutorial bzgl. SQLite angeschaut mit den üblichen Create,Read,Update und Delete Methoden und das sieht schon viel besser aus und ist auch einfach zu verstehen. Eine allgemeine Frage dazu: Wenn ich z.B. 1.000 Textdialoge in der App haben, dann muss ich ja vorher die Daten selbstständig irgendwo reinschreiben, aber wo? Bis jetzt habe ihc nur gesehen, dass man Text in der App eingibt, auf speichern klickt und dieser in der Datenbank gespeichert wird, also zur Runtime. Aber wie kann ich eine Datenbank im Voraus füllen? Muss ich einfach dann unmittelbar nach der MainAcitvity Class den Datenbankaufruf dazu starten zum Hinzufügen?

  • der syncadapter hat gar nichts zutun damit ob du SQLite benutzt oder nicht. der ist dafür da im hintergrund die daten vom server zu holen. Wo du die dann speicherst is dem egal. Aber ja für viele Abfragelastige Daten empfehle ich die SQLite anstatt XML.


    http://martin.cubeactive.com/a…ce-file-using-xml-sqlite/


    hier hast du eine anleitung wie du aus einer XML datei die Daten in die Datenbank speicherst :)

  • SQLite ist meines wissensnach die einzige DB Lösung die du lokal auf dem Device für deine App hast. Außerhalb von Android gibt es weitaus performantere Datenbanklösungen als SQLite. Welche die Performanteste ist, hängt jedoch dann von dem Einsatzgebiet ab.


    Gerne, dafür sind wir da :)

  • Also ich hab noch keine Bilder in den Videos auf youtube gesehen, aber ja, da bietet sich SQLite an :)
    Aber um den Text erstmal in die Datenbank zu bekommen, brauchst du eine Datei in der du den Text mit der App auslieferst. Das würde ich wie gesagt in einer XML-Datei machen und dann den Inhalt der XML-Datei in die Datenbank schieben.


    Normalerweise benutzt man für die String Ressourcen in Android. Aber ich glaube nicht, dass das System für SOVIEL Text ausgelegt ist. Vielleicht lohnt es sich erstmal mittels String Ressourcen das Projekt umzusetzen und zu schauen ob es performant läuft. Das ist meiner Meinung nach viel einfacher für dich. Wenn es nicht performanter läuft, kannst du dir immernoch die Arbeit mit der SQLite Datenbank machen.

  • Aber Bilder kommen evtll. noch für mich in Frage :-).
    Ok, dann würde ich sagen mache ich das erstmal mit Strings und ImageViews. Aber du kannst dir vorstellen, dass der Text ca. ein 200 Seiten Buch umfasst :D. Und sooo viele Strings oje :-).
    Du siehst ja in der App kommen die Dialoge zeitversetzt an ca. 2 Sekunden bis eine Entscheidung kommt. Sorry dafur aber kannst du mir auf die Sprünge helfen wie das grob zu realisieren ist? Hat nichts mit Faulheit zu tuen glaub mir habe schon mit delays gearbeitet und allem möglichen Mist der nie gefunzt hat und zu statisch war. Ist das eine gesamte große Schleife mit Verzweigungen drin? Sorry :(

Jetzt mitmachen!

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