如何在 Android 中加载 RecyclerView 背景中的所有图像

How to load all the images in the background of a RecyclerView in Android

您好,我正在处理一个有 1000 条记录的 Recycler 视图,我需要在其中显示远程图像。我一次加载 20 条记录。屏幕上一次可以显示 6 条记录(基于 android 设备的屏幕大小)。当行显示在屏幕上时,回收器视图正在向后端请求图像,这导致需要一些时间才能在屏幕上显示它(我正在使用 picasso 库进行延迟加载)。你能否建议我如何一次在后台缓存所有 20 张图像,这样我可以在用户向下滚动时立即向用户显示图像。 (这是我们的要求)

我认为这个 link 有你需要做的,但不完全是 20 条记录

首先你需要实现这个 LinearLayoutManager :

public class PreCachingLayoutManager extends LinearLayoutManager {
private static final int DEFAULT_EXTRA_LAYOUT_SPACE = 600;
private int extraLayoutSpace = -1;
private Context context;

public PreCachingLayoutManager(Context context) {
    super(context);
    this.context = context;
}

public PreCachingLayoutManager(Context context, int extraLayoutSpace) {
    super(context);
    this.context = context;
    this.extraLayoutSpace = extraLayoutSpace;
}

public PreCachingLayoutManager(Context context, int orientation, boolean reverseLayout) {
    super(context, orientation, reverseLayout);
    this.context = context;
}

public void setExtraLayoutSpace(int extraLayoutSpace) {
    this.extraLayoutSpace = extraLayoutSpace;
}

@Override
protected int getExtraLayoutSpace(RecyclerView.State state) {
    if (extraLayoutSpace > 0) {
        return extraLayoutSpace;
    }
    return DEFAULT_EXTRA_LAYOUT_SPACE;
}
}

然后将其设置为您回收视图的布局管理器。

PreCachingLayoutManager layoutManager = new  
PreCachingLayoutManager(getActivity());
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
layoutManager.setExtraLayoutSpace(DeviceUtils.getScreenHeight(getActivity()));
recyclerView.setLayoutManager(layoutManager);