RecyclerView导致条目错乱的原因:viewHolder的复用,一个复用的ViewHolder他里边的View有些属性已经被修改了,所以新的item在使用服用的viewHolder时,那些被修改的viewHolder里边的属性还依然存在,所以会导致新的item也应用到了原来的viewHolder属性,导致出现错乱
解决recyclerView加载图片闪越问题和图片错乱的问题
图片闪越:在onBindView方法中给图片设置站位图
图片错乱:一种是在onViewRecycle方法中取消加载的图片的异步任务,第二种是在onBindViewHolder方法中给ImageView设置Tag,在设置图片的时候判断Tag如果没有变化才设置图片。
Recycler类的内部成员变量
RecyclerView缓存机制总结:主要是三步
主要靠三个内部类来完成,Recycler,ViewCacheExtension,RecyclerViewPool:
1、首先通过 recycler.getViewForPosition()方法,该方法返回ViewHolder对象,通过源码可以知道,该方法会检查mAttachedScrap和一级缓存列表mCachedViews,如果有则返回ViewHolder进行复用。
2、然后调用ViewCacheExtension.getViewForPositionAndType()方法,注意这个方法是抽象方法,需要开发者进行重写。
3、最后检查RecyclerViewPool是否有ViewHolder。
注意
:上述的三个步骤中,只要有一个返回了ViewHolder,就不会在进行后边的步骤了。
最后:缓存的数量:默认的一级缓存中,mCachedViews中可以缓存的ViewHolder的个数是2;
默认的缓存池中的缓存数量是 5;
所以在缓存时,会先检测一级缓存是否满了,如果没满就add进去,如果满了就加入到三级缓存Recyclerpool
recyclerView的Item局部更新问题:
http://www.tuicool.com/articles/euuy2iM
RecyclerView的重用机制:
https://my.oschina.net/farina/blog/745927