0

在我的应用程序中,我有一个 recyclerview,它从 mp3 元数据加载图像并将它们放入我的应用程序的视图中。

但是,当快速滚动时,您可以清楚地看到 RV 无法跟上,即使加载发生在另一个线程上也是如此。

取景器的标准图像在一瞬间可见,然后出现一点延迟,然后图像被正确的图像替换。

但是,当用户向上滚动时,一切都很好,因为这些项目大部分仍在缓存中。

在用户滚动之前,我将如何设法让“缓存”领先?

假设用户启动应用程序并位于位置 0。可见元素 0 - 10。只要用户现在滚动,项目 11 就会变得可见并需要加载。但我希望在滚动发生之前已经加载它:

用户位于位置 0。可见项目 0 - 10,加载项目 0 - 25。当用户现在滚动时,RV 加载项目 25-30,即使当前只有项目 5 - 15 可见。所以房车提前加载。

一个人会怎么做呢?

谢谢你和欢呼。

4

1 回答 1

0

我很聪明:

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);
于 2018-12-18T12:24:37.547 回答