RecyclerView: Carregar Ahead de visibilidade

votos
0

No meu aplicativo, eu tenho um recyclerview que carrega imagens de meta dados de mp3 e coloca-los em sua viewholder em meu aplicativo.

No entanto, ao rolar rápido você pode ver claramente que a RV não pode manter-se, mesmo quando a carga acontece em outro segmento.

A imagem do standart para o viewholder é visível por uma fração de segundo, então um pouco de lag ocorre e, em seguida, a imagem é substituído com o correto.

No entanto, quando o usuário rola backup, está tudo bem desde que os itens são na sua maioria ainda em cache.

Como eu iria conseguir ter o cache para estar à frente antes de o usuário rola?

Então, digamos que o usuário inicia o aplicativo e está em pos 0. Visible são elementos 0 - 10. Assim que o usuário agora pergaminhos, o item 11 se torna visível e precisa de carregamento. Mas eu quero que isso já ser carregado antes da rolagem acontece assim:

Usuário está em pos 0. Visible são itens 0-10 e carregado são itens 0 - 25. Quando o usuário agora pergaminhos, os RV carrega itens 25-30 só tu itens 5-15 estão atualmente disponíveis. Assim, as cargas RV à frente.

Como seria de ir sobre isso?

Obrigado e aplausos.

Publicado 18/12/2018 em 11:07
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Eu estava sendo 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);
Respondeu 18/12/2018 em 12:24
fonte usuário

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