ListView und variable Höhe Elemente verursacht Scroll-Probleme

Ich habe eine ListView , die ich verwende, um eine Liste von Feldern, einem Text und einem Foto zu scrollen. Beide Höhen sind dynamisch : Die Textansicht kann einen sehr langen Absatz oder nur einen Satz enthalten, und das Bild wird skaliert, um die Breite zu passen, also ist die Höhe variabel (man sieht das Foto). Einige Artikel haben sogar kein Bild. Bildbeschreibung hier eingeben Das macht die Gegenstände sehr heterogen in der Höhe. Es gibt ein Element, das 2 Bildschirme lang sein kann, während ein anderes nur eine Zeile des Textes.

Ich habe es funktioniert etc .. aber wenn ich nach oben scrollen, da Recycling-Ansichten an der Spitze eingefügt werden, springt die Scroll-Position etwa die Größe des neuen Kindes. Scroll down funktioniert perfekt …

Ich verstehe mehr oder weniger, warum, offensichtlich die recycelten Ansichten sind völlig anders in der Größe, und das macht einige Scrolling Algorythmus scheitern, wo immer es auch sein mag.

Ich habe über das Überschreiben von itemType() und itemTypeCount , aber ich weiß nicht, ob es mit meinem Problem verwandt ist. In den Tests habe ich es nicht (magisch) gearbeitet.

Kann man das leicht feststellen, irgendwelche Trick- oder Magie-AnfragenLayout hier und da?

Es gibt einen Kerl, der vorschlägt, einen View Recycler zu schreiben, um dies zu beheben: Frage listview scrollt ziemlich junky, wenn therre verschiedene Zeilenhöhen sind

Würde ein View recycler schreiben so schrecklich kompliziert wie es klingt?

Sorry für die abstrakte Frage ..

  • Browser-Scroll-Ereignis schießt nicht oft genug auf iOS und Android-Geräten
  • Galerie-Event zu "wenn Bild zentriert"
  • Synchronisieren Sie die Position von zwei ScrollView-Ansichten
  • Android benutzerdefinierte listview sehr langsam beim scrollen
  • OnGestureListener # onScroll wird nicht von GestureDetector auf Samsung Galaxy Note 10.1 aufgerufen
  • Android: onScrollStateChanged SCROLL_STATE_IDLE schaltet manchmal nicht aus
  • Gehängte ListeSelector in ListView
  • Wie kann man mehrere Zeilen Text mit Scrollen in Android anzeigen?
  • 3 Solutions collect form web for “ListView und variable Höhe Elemente verursacht Scroll-Probleme”

    Erinnern Sie sich einfach an die Höhe der ImageView und der TextView, und dann, wenn Ihre Ansichten recycelt werden, legen Sie die Höhe für diese Ansichten aus der getView-Methode in Ihrem ListAdapter (Sie müssen BaseAdapter dafür erweitern).

    So hast du eine Liste von Objekten mit deinen Daten (etwas Text, vielleicht eine Bild-URL, etc.). Füge ein ganzzahliges Feld mit dem Namen imageHeight hinzu. Wenn Sie das Bild für ein Listenelement zum ersten Mal laden, speichern Sie die Höhe des ImageViews in diesem Integer-Feld in dem Datenobjekt, das diesem Listenelement zugeordnet ist. Dann setzen Sie in getView in Ihrem ListAdapter die Höhe der ImageView auf den Wert von imageHeight.

    Dadurch wird Ihr Adapter eine Ansicht zurückgeben, die die richtige Höhe hat. Natürlich funktioniert das nur, wenn du schon die Höhe des Bildes / Textes kennst, die du laden möchtest. Dies ist wahr, wenn Sie scrollen, da diese Elemente bereits geladen wurden.

    Versuchen Sie, die Bilder (in WeakHashMap) in getView zu cache und dann die Scroll up muss nicht das Bild neu laden, die die hässliche Höhe Neuberechnung verursachen …

    Verwenden Sie nicht die konvertierung der Methode getView (int position, View convertView, ViewGroup parent).

    Sie müssen die Zeile immer aufblasen, sobald die getView aufgerufen wird. Es wird das Scrollen etwas langsam, aber dein Problem wird gelöst werden.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.