1. Mitglieder surfen ohne Werbung auf Android-Hilfe.de! ✔ Jetzt kostenlos Mitglied in unserer Community werden.
  1. MichaelS, 04.06.2010 #1
    MichaelS

    MichaelS Threadstarter Fortgeschrittenes Mitglied

    Hallo zusammen...

    ich habe ein sehr eigenartiges Problem mit der Listview...
    ganz normale Listview mit adapter usw... wenn ich die listview direkt mit setcontentview hinzufüge funktioniert alles fehlerlos... sobald ich aber irgend nen layout sei es relativelayout erzeuge und darin die listview mache, funtzt es nicht mehr... ich weiß wirklich nicht wieso....

    es geht darum, in einem thread die listview zu aktualisieren bzw. dies mit einer animation verknüpft...

    hier ist ein fertiges beispiel projekt...
    Code:
    http://rapidshare.com/files/395127605/listviewTesting.zip.html
    ihr könnt es testen, in dem ihr die listview alleine auf die activity setzt und dann sollte es alle 2 sek blinken in der liste... wenn ihr es so lasst, wie es war, blinkt es nur einmal bzw. garnicht...

    ich wäre echt sehr sehr dankbar, wenn wir hier schnell ein Lösungen finden könnten =)

    hier nochmal die main datei...
    Code:
    http://pastebin.com/8vrhw4Ln
    Gruß
    MichaelS
     
  2. MichaelS, 04.06.2010 #2
    MichaelS

    MichaelS Threadstarter Fortgeschrittenes Mitglied

    Sebastian konnte mir ein tipp geben, dass man nach dem starten der animation mit notifyDataSetChanged es tatsache zum laufen bringt... jedoch würde mich sehr interessieren, warum es notwendig ist... falls jemand eine idee hat, kann er se gerne posten =)

    edit: leider bringt die lösung doch kein richtigen erfolg... bleibt gerne mal abundzu hängen und läuft auch nicht immer an... schade... also alle lösungen oder tipps sind willkommen =)
     
    Zuletzt bearbeitet: 04.06.2010
  3. MichaelS, 09.06.2010 #3
    MichaelS

    MichaelS Threadstarter Fortgeschrittenes Mitglied

    Der Weg war lang und sehr hart.... Aber das Problem konnte tatsächlich gefunden werden... Ich hatte kein Problem mit Threads oder ähnlichen... Das Problem war der Listview Adapter und der externe FremdZugriff auf den Adapter...

    Also ich hatte das Adapter System nicht richtig verstanden... ich habe Pro Listeintrag eine View erzeugt und diese gespeichert... bei erneuten GetView Aufruf, habe ich ich meinem speicher nach der View gesucht und angezeigt. Da ich die view selber gespeichert habe, konnte ich von aussen Änderungen erzwingen. Jedoch dabei liegt genau das Problem...

    Es ist so vorgesehen, dass der Adapter wirklich nur die Daten speichert und nicht die Views ansich... den die Views überschreibt er einfach ständig, damit er nicht soviele Views im speicher liegen haben muss...

    Also das Vorgehen ist an sich ziemlich einfach. Beim ersten GetView aufruf, hat man keine convertView. Dies bedeutet, man muss eine durch inflate erzeugen. und diese direkt mit den entsprechden Daten befüllen. Durch ein ViewHolder kann man vermeiden, dass man mit findview ständig nach den Views suchen muss.

    Beim erneuten Aufruf von GetView, bekommt man eine convertView. Diese ist einfach die letzte View, die er hat... Diese überschreibt man nun einfach mit den Daten, die man braucht... also keine neue view erzeugen oder ähnliches. So bleiben im Speicher nur minimale Views statt 10000 :D

    Ein gutes Beispiel findet man hier:
    List14.java | Android Developers
     
    sebastian bedankt sich.
  4. sebastian, 09.06.2010 #4
    sebastian

    sebastian Fortgeschrittenes Mitglied

    Erstmal danke, dass du uns hier die Lösung noch mitteilst!
    Kannst du erklären, warum sich das so seltsam auf die Animation auswirkt? Den Zusammenhang habe ich noch nicht ganz verstanden.


    Tipp:
    Falls jemand mal in den Items seiner ListView, Bilder und Checkboxen anzeigen möchte, benutzt ebenfalls solch einen eigener Adapter der den ViewHolder überschreibt! Die Checkboxen vergessen nämlich gerne ihren Checked State ;) Link mit Code dazu: Android Snippets: Clickable ListView Items
     
  5. MichaelS, 09.06.2010 #5
    MichaelS

    MichaelS Threadstarter Fortgeschrittenes Mitglied

    ganz genau, kann ich dies nicht erklären. jedoch vermute ich, dass der aufwand, die liste ständig aufwendiger bearbeitet wurde, dass sich verschiedene threads in die quere kamen oder ähnliches. Durch die Lösung, wurde die Listview um ein vielfaches schneller als vorher und hat somit keine Probleme mehr damit... Man muss erstmal versteuen, wie genau der Adapter funktioniert um nicht so Anfänger Fehler zu machen... Jedoch bin och froh, dass ich die Zeit hatte um dem Problem genauer auf die Spur zu kommen und in den Nachfolgenden Apps auch direkt richtig anwenden kann.

    Man sollte sich halt merken, den Adapter wirklich nur die Daten rüberwerfen und dann halt den Adapter auch das aktualisieren der Daten zu überlassen. Wenn man sich daran hält, sollte es zu keinen Problemen kommen.

    Gruß
    Michael
     
  6. ko5tik, 10.06.2010 #6
    ko5tik

    ko5tik Android-Experte

    Und wenn man verschiedene View-Typen in der Liste hat, solte man den ID setzten um feststellen zu können das es passendes View ist

    ( in meiner Highscore-Listen gibt es 2 Typen davon )
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
Hilfestellung Appentwicklung Android App Entwicklung 29.09.2018
ListView mit eigenem Layout zeigt im Querformat Items doppelt an Android App Entwicklung 24.06.2018
Eintrag in einer Datenbank mithilfe einer ListView löschen Android App Entwicklung 20.06.2018
Mit Webview.findallasync ein Wert überprüfen -Hilfe Android App Entwicklung 29.04.2018
Classen Methoden ,deren Aufruf und meine Anfänger Probleme. HILFE !!! Android App Entwicklung 18.04.2018
ListView: fehler android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 Android App Entwicklung 11.01.2018
Fehler bei der Kompilierung Android App Entwicklung 18.12.2017

Besucher kamen mit folgenden Begriffen auf unsere Seite:

  1. listview adapter in externen thread

  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.