setRecycledViewPool 方法 in RecyclerViewView

我试图理解setRecycledViewPool方法与RecyclerView一起在以下代码行中实际执行的操作,其中是RecyclizerView对象:mrecyclerView

mrecyclerView.setRecycledViewPool(new RecyclerView.RecycledViewPool());

我阅读了Android文档链接,但我仍然不清楚它的作用。有人可以向我解释它的用途以及何时使用它吗?


答案 1

setRecycledViewPool(...)当我们有一个嵌套的回收器视图时,可能会很有用。有关详细信息,请参阅博客文章。此处添加了同一链接的简短说明。

考虑这样一种情况:嵌套的 s 和内部的 s 共享相同的视图结构。 提供了一种在这些内部(嵌套)之间共享视图的无缝方式。RecyclerViewRecycleViewRecycledViewPoolRecyclerView

这种情况的一个例子可以在下图中看到:

enter image description here

如您所见,两个列表的视图类型是相同的。


答案 2

来自文档

回收视图池允许多个 RecyclerView共享一个通用的废料视图池。如果您有多个具有使用相同视图类型的适配器的 RecyclerView,例如,如果您有多个数据集,并且具有 ViewPager 显示的相同类型的项目视图,这将非常有用。

默认情况下,对于特定 viewType,池中将保留 5 个。如果要更改该计数,可以按以下方式完成:ViewHolder

recyclerView.getRecycledViewPool()
            .setMaxRecycledViews(SOME_VIEW_TYPE, POOL_CAPACITY);

来自这篇博客文章:

那么我们如何选择池的最佳大小呢?似乎最佳策略是在需要它变大之前扩展池,然后在之后立即缩小它。实现此目的的一种肮脏方法如下:

recyclerView.getRecycledViewPool().setMaxRecycledViews(0, 20);
adapter.notifyDataSetChanged();
new Handler().post(new Runnable() {
    @Override
    public void run() {
        recyclerView.getRecycledViewPool()
                    .setMaxRecycledViews(0, 1);
    }
});

推荐