我有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(从列表顶部开始)?
答案 0 :(得分:0)
这是完全正常的。我将简要解释它是如何工作的。
只要任何视图滚出窗口,RecyclerView就有两个选项:回收或重用该视图。它通过简单地将下一个出现的项目的viewType与滚动视图进行比较来确定要选择的选项;如果它们是相同的,只需重复使用视图,反之亦然。
在您的情况下,在最后两个ViewType0视图设置为显示之前,这些5个ViewType0视图肯定会被回收很长时间,因此显示视图的唯一方法是重新创建它。