RecyclerView重用算法

时间:2015-03-05 14:14:33

标签: android android-recyclerview

我有Adapter个多种视图类型。 我注意到即使onCreateViewHolder()onCreateViewHolder()onBindViewHolder()正确实现,getItemViewType()也会经常被调用。

例如,我的RecyclerView应该显示这样的不同项目的简单列表,并假设所有项目具有相同的视图高度,并且6个元素填充整个屏幕(匹配RecyclerView的高度):

> ViewType0
> ViewType0
> ViewType0
> ViewType0
> ViewType0
> ViewType1
> ViewType2
> ViewType2
> ViewType2
> ViewType2
> ViewType1    
> ViewType1
> ViewType1
> ViewType0
> ViewType0
> ViewType0

在滚动并到达列表末尾时,似乎最后两个项目(ViewType0)RecyclerView调用onCreateViewHolder()但从我的角度来看,recyclerview应该回收(重用)已经存在的一个(列表顶部有5个不可见的)而不是为最后两个项重新创建两个新的。

这种行为是正常的吗?我可以应用的设置是为了避免重新创建新的ViewHolder,因为应该有可重复使用的ViewHolders(从列表顶部开始)?

1 个答案:

答案 0 :(得分:0)

这是完全正常的。我将简要解释它是如何工作的。

只要任何视图滚出窗口,RecyclerView就有两个选项:回收或重用该视图。它通过简单地将下一个出现的项目的viewType与滚动视图进行比较来确定要选择的选项;如果它们是相同的,只需重复使用视图,反之亦然。

在您的情况下,在最后两个ViewType0视图设置为显示之前,这些5个ViewType0视图肯定会被回收很长时间,因此显示视图的唯一方法是重新创建它。