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

Mur*_*ali 4 android lazy-loading picasso android-recyclerview

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

jam*_*mil 6

我认为这个链接有你需要做的,但不完全是 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;
}
}
Run Code Online (Sandbox Code Playgroud)

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

PreCachingLayoutManager layoutManager = new  
PreCachingLayoutManager(getActivity());
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
layoutManager.setExtraLayoutSpace(DeviceUtils.getScreenHeight(getActivity()));
recyclerView.setLayoutManager(layoutManager);
Run Code Online (Sandbox Code Playgroud)