RecyclerView: Laden Ahead Of Sichtbarkeit

stimmen
0

In meiner Anwendung habe ich eine recyclerview, die Bilder von MP3-Meta-Daten und legt sie in ihre viewholder in meiner App lädt.

siehe Wenn jedoch schnell Scrollen kann man deutlich, dass der RV nicht mithalten kann, auch wenn die Belastung auf einem anderen Thread passiert.

Das standart Bild für die viewholder sichtbar für einen Bruchteil einer Sekunde, dann eine wenig Verzögerung auftritt, und dann wird das Bild mit dem richtigen ersetzt.

Wenn jedoch scrollt der Benutzer sichern, alles ist in Ordnung, da die Elemente meist noch im Cache sind.

Wie würde ich verwalten den „Cache“ voraus zu sein, bevor der Benutzer scrollt zu bekommen?

So sagen die Nutzer die App startet und ist an Pos 0 Sichtbar sind die Elemente 0 - 10. Sobald der Benutzer nun blättert, Punkt 11 sichtbar wird und das Laden benötigt. Aber ich möchte, dass bereits geladen werden, bevor die Schriftrolle geschieht so:

Der Nutzer ist bei po 0 Sichtbar sind Elemente von 0 bis 10 und geladen sind Elemente 0 - 25. Wenn der Benutzer nun Schriftrollen, die RV laden Elemente 25-30 auch ich nur Artikel 5 bis 15 zur Zeit sichtbar sind. So die RV Lasten vor.

Wie würde man über diese gehen?

Vielen Dank und Beifall.

Veröffentlicht am 18/12/2018 um 11:07
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Ich war sein smart:

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);
Beantwortet am 18/12/2018 um 12:24
quelle vom benutzer

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