RecyclerView: Carga por delante de Visibilidad

votos
0

En mi aplicación, tengo un recyclerview que carga las imágenes de los metadatos mp3 y los coloca en su viewholder en mi aplicación.

Sin embargo, cuando se desplaza rápido se puede ver claramente que la RV no puede mantener el ritmo, incluso cuando la carga pasa en otro hilo.

La imagen standart para el viewholder es visible durante una fracción de segundo, luego un poco de retraso se produce y luego la imagen se reemplaza con la correcta.

Sin embargo, cuando el usuario se desplaza hacia arriba, todo está bien, ya que los artículos son en su mayoría todavía en la memoria caché.

¿Cómo me las arreglaría para obtener el caché a estar por delante antes de que el usuario se desplaza?

Así que decir que el usuario inicia la aplicación y está en posición 0. visible son elementos 0 - 10. Tan pronto como el usuario se desplaza ahora, el punto 11 se hace visible y necesita carga. Pero quiero que estar ya cargado antes de que el desplazamiento ocurre así:

El usuario está en la pos 0. Visible son artículos 0 - 10 y cargado son artículos de 0 - 25. Cuando el usuario AHORA volutas, los elementos de las cargas RV 25-30 incluso tú sólo puntos el 5 - 15 son actualmente visible. Por lo que las cargas RV delante.

¿Cómo se podría seguir hablando de esto?

Gracias y saludos.

Publicado el 18/12/2018 a las 11:07
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

Estaba siendo inteligente:

public class PreCachingLayoutManager : LinearLayoutManager
{
     private const int DEFAULT_EXTRA_LAYOUT_SPACE = 1000;
     private int extraLayoutSpace = -1;
     private Context context;

     public PreCachingLayoutManager(Context context) : base(context)
    {
         this.context = context;
     }

     public void setExtraLayoutSpace(int extraLayoutSpace)
     {
         this.extraLayoutSpace = extraLayoutSpace;
     }

     protected override int GetExtraLayoutSpace(RecyclerView.State state)
     {
         if (extraLayoutSpace > 0)
         {
             return extraLayoutSpace;
         }
         return DEFAULT_EXTRA_LAYOUT_SPACE;
     }
}

        mLayoutManager = new PreCachingLayoutManager(this);
        mLayoutManager.ItemPrefetchEnabled = true;
        mRecyclerView.SetLayoutManager(mLayoutManager);
Respondida el 18/12/2018 a las 12:24
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more