ImageView in ListView: Scroll "ruckelt"

A

andy572

Ambitioniertes Mitglied
7
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
 
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.
 
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
 
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 )
 
ko5tik schrieb:
GetView wird immer dann aufgerufen wenn ein Listeintrag sichtbar wird.

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 ;)
 
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 )
 
  • Danke
Reaktionen: andy572
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 ;)
 
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
 

Ähnliche Themen

A
Antworten
10
Aufrufe
1.021
swa00
swa00
D
Antworten
23
Aufrufe
2.527
Data2006
D
D
Antworten
9
Aufrufe
1.765
jogimuc
J
Zurück
Oben Unten