RecyclerView如何处理不同视图的回收?

时间:2017-07-21 15:00:30

标签: android android-recyclerview

当我们在RecyclerView中拥有异构视图时,它如何处理回收? 例如,在以下代码中,我们创建了3种不同类型的视图,以便在回收站视图中使用。  现在,在这些观点被夸大之后,recyclerView如何知道不将这些视图用于位置1& 2其余项目?

in the x direction for the y axis

3 个答案:

答案 0 :(得分:3)

RecyclerView基本上保留了多个View对象池,getItemViewType返回的每个值都有一个池。当它需要新项目的视图时,它首先调用getItemViewType。然后它转到相应的池中以获得该结果(如果不存在则创建一个新的)并从中获取视图。它会记住屏幕上每个视图的类型。当视图从屏幕上循环时,它将返回到正确的池中。

答案 1 :(得分:0)

我没有完全回答你的问题。以下是RecyclerView如何运作的解释:

RecyclerView.Adapter保留了一组视图。虽然可能,但它将使用其中一个空实例。当它不可能时(池是空的)它将创建一个新的。但是这个池如何变空?

当视图附加到ReciclerView时,只有当您不显示该视图时,它才会从池中删除以再次添加回来 - >您应该重置视​​图中的所有内容的原因。

所以基本上RecyclerView对你的观点一无所知。它将使用新的View,或者尽可能使用从适配器中的池中获取的Recycled。然后在onBindViewHolder中夸大你所说的观点。如果视图中包含某些属性,如颜色或文本或其他任何属性,如果您不重置它,它将保留在循环视图中。

修改

正如Gabe Sechan所说,正确的视图类型由方法getItemViewType(int position)确定,该方法返回要充气的正确视图类型。

答案 2 :(得分:0)

Recycler视图有一个方法 在该方法中创建视图时,您将获得从(从get viewitem类型)返回的相同视图类型,并且在创建视图中,只需实现与get item type方法相同的检查。 在创建视图中,只需将视图传递给视图持有者的对象,如同 查看类型。只是尝试采取差异。查看不同视图的持有者