Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在RecycleView中设置RecycledViewPool方法_Java_Android_Android Layout_Android Recyclerview_Android View - Fatal编程技术网

Java 在RecycleView中设置RecycledViewPool方法

Java 在RecycleView中设置RecycledViewPool方法,java,android,android-layout,android-recyclerview,android-view,Java,Android,Android Layout,Android Recyclerview,Android View,我试图理解setRecycledViewPool方法在以下代码行中与RecycleView一起实际执行的操作,mrecycleView是一个RecycleView对象: mrecyclerView.setRecycledViewPool(new RecyclerView.RecycledViewPool()); 我阅读了Android文档,但仍然不清楚它的功能。有人能给我解释一下它的用途和什么时候使用吗?我自己也没有用过,但从我的理解来看,阅读文档是一种使用视图的方法,你可以在一个回收视图中与

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

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

我阅读了Android文档,但仍然不清楚它的功能。有人能给我解释一下它的用途和什么时候使用吗?

我自己也没有用过,但从我的理解来看,阅读文档是一种使用视图的方法,你可以在一个回收视图中与另一个视图一起回收

因此,如果您有一个带有一堆装饰卡片视图的RecyclerView,并且您希望为另一个RecyclerView回收这些视图,您可以将其传递给一个共享的RecycleredViewPool。现在,两个RecyclerView都将从共享视图池中获取。

来自:

回收的视图池允许多个RecyclerView共享一个共用的废弃视图池。如果您有多个使用相同视图类型的适配器的RecyclerView,例如,如果您有多个数据集具有由ViewPager显示的相同类型的项目视图,则此选项非常有用

默认情况下,对于特定的视图类型,池中会保留5个
ViewHolder
s。如果要更改该计数,可通过以下方式进行:

recyclerView.getRecycledViewPool()
            .setMaxRecycledViews(SOME_VIEW_TYPE, POOL_CAPACITY);
从博客帖子:

那么,我们如何选择池的最佳大小呢?看起来,最佳策略是在你需要它变大之前扩展它,然后马上缩小它。实现这一点的一种方法是:

setRecycledViewPool(…)
在我们有嵌套的RecyclerView时非常有用。有关详细信息,请参阅博客文章。此处添加了同一链接的简短说明

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

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


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

当RecyclerView预计同时在屏幕上显示5个以上的视图(5是当前默认值)时,建议将其放大到您认为的最大值。这将允许在滚动时进行实际的循环(RecyclerView的目的…),避免重新创建视图

事实上,因为我认为几乎不知道屏幕上会显示多少(不同的屏幕分辨率等),所以我认为最好将其设置为最大值:

fun RecyclerView.setMaxViewPoolSize(maxViewTypeId: Int, maxPoolSize: Int) {
    for (i in 0..maxViewTypeId)
        recycledViewPool.setMaxRecycledViews(i, maxPoolSize)
}
用法:

    recyclerView.setMaxViewPoolSize(MAX_TYPE_FOR_THE_ADAPTER_YOU_MADE, Int.MAX_VALUE)

我个人不明白为什么这不是默认行为。使用RecyclerView的全部目的是回收视图。在滚动时,默认情况下,它应该循环使用刚刚使用的视图

该死。。听起来很有趣。。。我当然想知道更多关于它的信息,你能用一些例子和实现来解释它吗?另外,我们应该注意侦听器点击项目。因为如果我们使用多个RecyclerViews,我们的项目可以有相等的位置,所以点击事件可以重叠。救生圈!我们遇到了一个问题,在一定数量的元素(好吧,5)之后,
onCreateViewHolder
将被重复调用。这篇文章一下子回答了许多问题。谢谢。@Beko我个人认为这个问题已经过去了,没有人应该再使用它了,也许我错了。真奇怪。你能进一步研究一下吗?也许我错了。嘿,对不起,我忘了回复。为什么你认为这不再是一个问题?无论如何,我可能会在某个时候对它进行更深入的研究。最近我在RecyclerViews上有点麻烦。@Beko我不知道。我想现在已经不需要了。请检查一下,让我知道。
    recyclerView.setMaxViewPoolSize(MAX_TYPE_FOR_THE_ADAPTER_YOU_MADE, Int.MAX_VALUE)