RecyclerView: Załaduj Ahead widzialności

głosy
0

W moim app, mam recyclerview który ładuje obrazy z metadanych mp3 i umieszcza je na swojej viewholder w mojej aplikacji.

Jednak podczas przewijania szybko można wyraźnie zobaczyć, że RV nie może nadążyć, nawet gdy ładowanie odbywa się na innym wątku.

Obraz standart dla viewholder jest widoczny na ułamek sekundy, potem trochę opóźnienie wystąpienia, a następnie obraz zostanie zastąpiony poprawny.

Jednak, gdy użytkownik przewija kopii zapasowej, wszystko jest w porządku, ponieważ elementy są przeważnie jeszcze w pamięci podręcznej.

W jaki sposób udaje mi się uzyskać „cache”, aby wyprzedzić zanim użytkownik przewija?

Więc powiedzieć, że użytkownik uruchamia aplikację i jest w poz 0. Widoczne są elementy 0 - 10. Z chwilą, gdy użytkownik przewija teraz, poz 11 staje się widoczna i musi załadunek. Ale ja chcę, żeby być już załadowany przed zdarza zwój tak:

Użytkownik nie jest w poz 0. Widoczne są pozycje 0 - 10 i ładowane są przedmioty 0 - 25. Gdy użytkownik TERAZ przewija, pozycje ładunki RV 25-30 nawet ty tylko pozycje 5 - 15 są obecnie widoczne. Więc obciążeń RV naprzód.

Jak można by iść na ten temat?

Dziękuję i wiwaty.

Utwórz 18/12/2018 o 11:07
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

I był ewidentnie mądry:

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);
Odpowiedział 18/12/2018 o 12:24
źródło użytkownik

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