1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. andy572, 13.09.2010 #1
    andy572

    andy572 Threadstarter Android-Hilfe.de Mitglied

    Hi @all,

    habe eine ListView erstellt, diese beinhaltet folgendes Layout als ListItem (Attribute sind im "richtigen" XML sind natürlich vorhanden):

    Code:
    <LinearLayout>
      <ImageView/>
      <LinearLayout>
        <TextView/>
        </TextView>
      </LinearLayout>
    </LinearLayout>
    
    Nun zum Problem:
    Es werden z.T. Images aus dem Internet geladen, was soweit funktioniert - Aaaaber: Nachdem alles geladen ist und die Liste angezeigt wird, sieht auf den ersten Blick alles ganz nett aus, aber beim scrollen auf dem Phone fängt die ganze Geschichte an zu ruckeln bzw stottern. Klingt für mich als etwas erfahrener Programmierer nach einem "ReDraw"-Event das sicherlich ausgelöst wird beim scrollen. Kann man was dran drehen ? Evtl. irgendeinen "Draw"-Cache oder sowas ?

    Kann auch sein, dass ich was falsch verstanden habe:
    Die Bilder aus dem Internet werden über die Drawable-Funktion geladen, evtl. hängt auch dort der Fehler...

    Bin für jeden Hinweis dankbar ;)

    LG
    Andy
     
  2. ko5tik, 13.09.2010 #2
    ko5tik

    ko5tik Android-Experte

    Rückeln == Garbage Collection == Du Hast mit dem Speicherverwaltung mist gebaut ;)
    ( höchtswahrscheinlich )
    Zeige mal wie due die Bilder lädst, und wie deiner List-Adapter aussieht.
     
  3. andy572, 13.09.2010 #3
    andy572

    andy572 Threadstarter Android-Hilfe.de Mitglied

    Hat sich soeben erledigt:

    Ich Depp hab die Bilder aus dem Internet in der getView() Function im ListAdapter geladen... was natürlich verkehrt ist - verursacht glaube auch etwas viel Daten-Transfer auf der Leitung :D

    Habe die Funktionen dazu nun ausgelagert in die Funktion, die die Liste initialisiert bzw füllt und siehe da - es funktioniert "sauber" und es scrollt wieder smooth :)

    Danke trotzdem & LG
    Andy
     
  4. ko5tik, 13.09.2010 #4
    ko5tik

    ko5tik Android-Experte

    GetView wird immer dann aufgerufen wenn ein Listeintrag sichtbar wird.
    Unter Umständen ist es sogar sinnvoll, die mitlegieferte Views zu recyclen
    ( Ich habe Listen mit 1000+ Einträgen - wenn man es nicht macht, ist Telefon mit nur mit Garbage collection beschäftigt )
     
  5. andy572, 13.09.2010 #5
    andy572

    andy572 Threadstarter Android-Hilfe.de Mitglied

    Nach etwas Debug habe ich das auch gesehen, hätte ich auch gleich drauf kommen können - schließlich wird da ja explizit nach einem Item mit "position" gfragt ;)

    Eine Frage noch:
    Wie kann man eine View "recyclen" ?

    Noch was:
    Der erste Wechsel zwischen den Tabs, die die Anwendung eigentlich ausmachen dauert es etwas, bis die Tabs dann nach dem Touch wechseln - aber nur beim ersten aktivieren. Wechsel ich danach hin und her, reagieren die Tabs "normal". Werden Tabs erst zur Laufzeit "gefüllt" und deren Inhalt auch erst ? Kommt mir zumindest so vor. Oder ich hab auch hier Code an der falschen Stelle plaziert - bin mit Android erst seit paar Tagen zu Gange ;)
     
  6. ko5tik, 13.09.2010 #6
    ko5tik

    ko5tik Android-Experte

    Schaz mal die Signature:

    public View getView(int i, View convertView, ViewGroup viewGroup)

    mit dem convertView ist eine View gemeint, die Framework gegebenfalls gerne recyclen würde.
    Also:
    - überprufen ob die vorhanden ist ( != null )
    - übweprüfen ob passender Typ ( bei mir gibt Es verschiedene Typen für Highscore / aktuellen Wert


    Code:
    
    
                result = convertView;
                if (result == null || result.getId() != R.id.regular_highscore_view) {
                    // reuse view
                    result = LayoutInflater.from(context).inflate(R.layout.highscore_list_entry, viewGroup, false);
                    //System.err.println("create new layout");
                } else {
                    //System.err.println("reused layout ");
                }
    
    
    
    ( ID kommt aus dem XML-Layout )
     
    andy572 gefällt das.
  7. andy572, 13.09.2010 #7
    andy572

    andy572 Threadstarter Android-Hilfe.de Mitglied

    Ach soooo ... "reusable code" ist gemeint ^^

    ja, das hab ich schon an einigen stellen verbaut, hab neulich schon was gefunden über Optimierung beim Android Framework, aber sowas macht man ja generell in der Programmierung. Komme ursprünglich aus der C++ Ecke und da achtet man auch drauf daß der Heap nicht vollgemüllt wird sondern zB. man auch mal ein "delete" nutzt ;)
     
  8. ko5tik, 14.09.2010 #8
    ko5tik

    ko5tik Android-Experte

    In diesen Fall ist es nich Code das wiederverwendet wird, sondern die Objekte
    (Widgets) - man muss die nur neu konfigurieren, mit neuen Texten versehen und
    einen neuen Parent zuweisen - also erst mal gar keinen delete() verursachen
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[OFFEN] Widget zeigt keine ImageView an. Android App Entwicklung Gestern um 09:39 Uhr
[GESCHLOSSEN] Random ListItem ausgeben funktioniert nicht mehr Android App Entwicklung 13.08.2017
[OFFEN] Bild per Intent an ListView übergeben und anzeigen Android App Entwicklung 13.08.2017
[ERLEDIGT] Listview mit Datenbank über Custom ArrayList verbinden Android App Entwicklung 22.04.2017
[ERLEDIGT] Drawer mit scrollbarem Listview Android App Entwicklung 27.03.2017
ListView fix am unteren Bildschirmrand ausgeben Android App Entwicklung 01.03.2017
ProgressBar in ListView Android App Entwicklung 03.01.2017
ListView Element an eine Datenbank senden Android App Entwicklung 04.12.2016
schleife für image view animations Android App Entwicklung 24.10.2016

Users found this page by searching for:

  1. android imageview scroll

Du betrachtest das Thema "ImageView in ListView: Scroll "ruckelt"" im Forum "Android App Entwicklung",