ListView - ImageLoader verschiebt die Liste / Elemente nach oben

8

Ich suche einen halben Tag nach einer Antwort, aber ich kann nichts finden, obwohl ich dachte, dass es ein häufiges Problem ist. Mein Problem: Ich habe eine ListView , die Elemente in verschiedenen Größen (Höhen) hat. Jeder Gegenstand enthält ein ImageView . Das Image für dieses ImageView wird im Hintergrund von einer ImageLoader-Klasse geladen:

%Vor%

Wenn ich den ListView runterscrolle, funktioniert alles gut. Die Bilder werden geladen und angezeigt (natürlich am unteren Rand des Bildschirms / der Liste).

Aber wenn ich nach oben scrolle und das Bild nicht mehr im Cache gespeichert ist, muss der ImageLoader das Bild neu laden, die ListView springt / die Objekte werden verschoben. Ich denke es liegt daran, dass ein neues View über der Liste mit einem ImageView mit 0dp height erstellt wird. Wenn das Bild geladen und auf ImageView eingestellt ist, ändert sich die Höhe von ImageView automatisch von 0dp auf die Größe des Bildes. Dies würde die ListView nach unten drücken, denke ich.

Ich habe versucht, die Höhe von ImageViews zu speichern, wenn ein Bild gesetzt ist, und dann die Höhe von ImageView , die oben erstellt wurde, auf die gespeicherte Höhe zu setzen. Aber ohne Erfolg ..

Ich weiß nicht, ob Sie mein Problem verstehen können: D Ich hoffe es:)

Danke und einen schönen Tag!

BEARBEITEN: Hinzugefügt ImageLoader Klasse

%Vor%

BEARBEITEN: Adapter hinzugefügt:

%Vor%

Und hier ist die Fragment , welche die ListView

enthält %Vor%

Hier sind viele Informationen und Code. Ich hoffe das erschreckt niemanden zu helfen: D

Danke !!

    
Wicked161089 19.05.2015, 17:27
quelle

3 Antworten

2

Ich habe das Problem wahrscheinlich gelöst .. Endlich .. Meine Idee, die Höhe von ImageView in getView zu setzen, war nicht so schlimm .. Problem war:

Mein ImageView wurde in ein CardView in XML eingebunden. Also musste ich die Höhe von CardView anstelle von ImageView ändern:)

    
Wicked161089 31.05.2015, 10:29
quelle
4

Bitte, bitte, bitte "nicht das Rad neu erfinden" und benutze irgendeine lib da draußen für Bildladen, Caching usw. wie Picasso, Fresco, Glide usw. ....

    
murielK 05.06.2015 10:01
quelle
1

WeakHashMap ... Sie verwenden schwache Referenzen. Was macht das richtig? Löscht Objekte, wenn sie nicht mehr verwendet werden. Also, ändern Sie es einfach in HashMap und Sie sollten es gut machen.

    
rubmz 31.05.2015 06:17
quelle