Android Recyclerview预加载视图

时间:2016-11-01 10:57:15

标签: android android-recyclerview preload

我想知道如何避免白色的小闪光'当用户滚动得更快时,回收者视图中的视图 当然可以通过在可见屏幕之外预加载更多视图来避免闪烁

我找不到任何可以做到的事情,虽然这一定是一个非常常见的任务?

我在博客上尝试了这段代码:

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;
    }
}

然后我使用setLayoutManager()
将LayoutManager分配给构造函数中的自定义Recyclerview 它是" custom",但我只想在构造函数中设置LayoutManager,这就是为什么我覆盖了RecyclerView的原因 不幸的是,这没有任何影响

1 个答案:

答案 0 :(得分:5)

RecyclerView已经是一个非常有效的API,通常如果你有帧丢失,你可以优化你的项目布局更轻,并确保你在回收视图时释放资源。实际上没有必要预加载任何东西。

这是一篇博客文章,提供了如何做这些事情的一些想法 https://blog.workable.com/recyclerview-achieved-60-fps-workables-android-app-tips/

他们在这篇文章中没有提到它,但如果你的物品有图像,请确保这些图像不是太大。

重点是尽可能快地绘制您的视图,因为滚动时会不断重绘所有内容。