Los elementos ListView y de altura variable provocan problemas de desplazamiento

Tengo un ListView que utilizo para desplazar una lista de campos, un texto y una foto. Ambas alturas son dinámicas : la vista de texto puede contener un párrafo muy largo o simplemente una oración, y la imagen se ajusta a la anchura, por lo que la altura es variable (se puede ver la foto). Algunos artículos incluso no tienen una imagen. Introduzca aquí la descripción de la imagen Esto hace que los elementos sean muy heterogéneos en altura. Hay un elemento que puede ser de 2 pantallas de largo, mientras que otro sólo una línea de texto.

Tengo que trabajar, etc. pero cuando me desplazo hacia arriba, como se recicla vistas se insertan en la parte superior, la posición de desplazamiento salta aproximadamente el tamaño del nuevo niño. Desplácese hacia abajo funciona perfectamente …

Entiendo más o menos por qué, obviamente, las vistas recicladas son totalmente diferentes en tamaño, y esto hace que algún algoritmo de desplazamiento no, dondequiera que sea.

He leído sobre sobreponderar itemType() y itemTypeCount , pero no sé si está relacionado con mi problema. En las pruebas que hice no funcionó (mágicamente).

¿Se puede arreglar esto fácilmente, cualquier truco o solicitud mágicaLayout aquí y allá?

Hay un tipo que sugiere escribir un reciclador de Vista para arreglar esto: la pregunta listview se desplaza bastante chatarra cuando hay diferentes alturas de fila

¿Escribir un View recycler sería tan terriblemente complicado como suena?

Perdon por la pregunta abstracta

Sólo recuerda la altura de ImageView y TextView, y luego cuando tus vistas se están reciclando, establece la altura para esas vistas desde el método getView en tu ListAdapter (necesitas extender BaseAdapter para esto).

Así que tienes una lista de objetos con tus datos (algún texto, tal vez una URL de imagen, etc). Agregue un campo entero llamado imageHeight. Cuando cargue la imagen para un elemento de lista por primera vez, guarde la altura del ImageView en ese campo de entero en el objeto de datos asociado con ese elemento de lista. A continuación, en getView en su ListAdapter, establezca la altura de ImageView con el valor de imageHeight.

Esto hará que su adaptador devuelva una vista que tenga la altura adecuada. Por supuesto, esto sólo funciona si ya conoce la altura de la imagen / texto que va a cargar. Esto será cierto si se desplaza hacia arriba, ya que esos elementos ya se han cargado.

Trate de almacenar en caché las imágenes (en WeakHashMap) en getView y, a continuación, el desplazamiento hacia arriba no tendrá que recargar la imagen, que causan el recálculo de altura fea …

No utilice el método convertView del método getView (int position, View convertView, ViewGroup parent).

Tienes que inflar la fila cada vez que se llama al getView. Hará que el desplazamiento sea algo lento, pero su problema será resuelto.

  • Limitar el número de líneas en TextView
  • Rellenar Listview de JSON
  • Iniciar una animación onstart CustomViewPager
  • Desplazar RecyclerView para mostrar el elemento seleccionado en la parte superior
  • Android View deja de recibir eventos táctiles cuando el padre se desplaza
  • Android smoothScrollBy se comporta mal
  • Actualizar Android listview after scrollBy on
  • Webview no desplazamiento después de agregar setOnTouchListener
  • Desplazamiento del índice de Android
  • La posición de desplazamiento salta a los elementos de la lista anterior mientras se desplaza hacia arriba en la vista de lista personalizada
  • No se puede cambiar el tamaño de los niños de diseño lineal en android reaccionar módulo nativo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.