RecyclerView: нагрузка впереди видимости - PullRequest
0 голосов
/ 18 декабря 2018

В моем приложении у меня есть просмотрщик, который загружает изображения из метаданных mp3 и помещает их в их видоискатель в моем приложении.

Однако при быстрой прокрутке вы можете четко видеть, что RV не может идти в ногу,даже когда загрузка происходит в другом потоке.

Стандартное изображение для держателя видимо на долю секунды, затем происходит небольшая задержка, а затем изображение заменяется на правильное.

Однако, когда пользователь прокручивает резервную копию, все в порядке, поскольку элементы в основном все еще находятся в кеше.

Как мне добиться того, чтобы "кэш" был впереди, прежде чем пользователь прокручивает?

Допустим, пользователь запускает приложение и находится в позиции 0. Видны элементы 0 - 10. Как только пользователь теперь прокручивает, элемент 11 становится видимым и нуждается в загрузке.Но я хочу, чтобы он уже был загружен до того, как произойдет прокрутка:

Пользователь находится в позиции 0. Видны элементы 0 - 10, а загружены элементы 0 - 25. Когда пользователь NOW прокручивает, RV загружает элементы25-30, хотя ты видишь только пункты 5 - 15.Таким образом, RV загружается вперед.

Как можно продолжить это?

Спасибо и ура.

1 Ответ

0 голосов
/ 18 декабря 2018

Я был умным:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...