PDA

Ver la Versión Completa : Como hacer scroll infinito en un RecyclerView


Dild0
24/11/14, 13:35:59
Buenas me gustaría implementar un RecyclerView en el que pueda tener un scroll infinito y pongo el ejemplo de un calendario que por mucho q bajes siempre hay dias nuevos.

Como debo abordarlo? Si le meto un número muy alto puede dar la sensación de infinito pero no lo es, igualmente si ademas le añado imágenes puede que me de errores de memoria.

kriogeN
24/11/14, 14:13:59
Yo tenía hecho un Adapter para eso en ListView y en GridView, ahora lo he adaptado a RecyclerView.

Básicamente lo que tienes que hacer es que el getitemCount() devuelva siempre 1 elemento más del tamaño del List asociado al Adapter, y cuando ese elemento se muestre hacer una solicitud de la siguiente "página", añadirla al List actual y hacer un notifyDataSetChanged(). Yo además lo que hago es en esa posición mostrar un Spinner hasta que la solicitud se ha completado (lo uso siempre con solicitudes a servicios web, en tu caso el Spinner ni se llegaría a ver si va a ser sobre datos locales)

En tu caso concreto no se si lo "optimizaría", y haría un scroll infinito por arriba y otro por abajo, ya que siempre puede haber días antes del actual. En ese caso el getItemCount() tendría siempre + 2, uno para la posición 0 para pedir la página anterior y otro para la última para pedir la página siguiente. Y los datos siempre entre las posiciones 1 y penúltima.

En cuanto a lo de las imágenes en los RecyclerView, no vas a tener ningún problema siempre y cuando el Bitmap lo generes en el Bind, y no ya creado en el propio List (donde realmente lo que tienes que tener es una referencia al fichero de la imagen), y además uses SoftReference.

Dild0
24/11/14, 14:31:07
Yo tenía hecho un Adapter para eso en ListView y en GridView, ahora lo he adaptado a RecyclerView.

Básicamente lo que tienes que hacer es que el getitemCount() devuelva siempre 1 elemento más del tamaño del List asociado al Adapter, y cuando ese elemento se muestre hacer una solicitud de la siguiente "página", añadirla al List actual y hacer un notifyDataSetChanged(). Yo además lo que hago es en esa posición mostrar un Spinner hasta que la solicitud se ha completado (lo uso siempre con solicitudes a servicios web, en tu caso el Spinner ni se llegaría a ver si va a ser sobre datos locales)

En tu caso concreto no se si lo "optimizaría", y haría un scroll infinito por arriba y otro por abajo, ya que siempre puede haber días antes del actual. En ese caso el getItemCount() tendría siempre + 2, uno para la posición 0 para pedir la página anterior y otro para la última para pedir la página siguiente. Y los datos siempre entre las posiciones 1 y penúltima.

En cuanto a lo de las imágenes en los RecyclerView, no vas a tener ningún problema siempre y cuando el Bitmap lo generes en el Bind, y no ya creado en el propio List (donde realmente lo que tienes que tener es una referencia al fichero de la imagen), y además uses SoftReference.

Muchas gracias, me pondré con ello a ver si dejo Adapter chulo para que funcione

Gracias por la guía