RecycledView源码解析

 

RecyclerView LayoutManager Adapter,ViewHolder,ItemDecoration这些和RecycleView使用息息相关的类到底是什么关系

ItemDecoration这些和RecycleView使用息息相关的类到底是什么关系

onMeasure 


onLayout
        sMinWidthField = View.class.getDeclaredField("mMinWidth");
        
        chooseSize
        
        setMeasuredDimension
        countOne       ViewHolder         Adapter,ViewHolder,ItemDecoration这些和RecycleView使用息息相关的类到底是什么关系
        
        AdapterDataObserver {
        
        
        
        
        
        dispatchLayoutStep1      }

        dispatchLayoutStep2                        getViewForPosition
        
        createViewHolder
        
        onLayout
        
1.RecyclerView是将绘制流程交给LayoutManager处理,如果没有设置不会测量子View。
        
2.绘制流程是区分正向绘制和倒置绘制。

3.绘制是先确定锚点,然后向上绘制,向下绘制,fill()至少会执行两次,
如果绘制完还有剩余空间,则会再执行一次fill()方法。

4.LayoutManager获得View是从RecyclerView中的Recycler.next()方法获得,
涉及到RecyclerView的缓存策略,如果缓存没有拿到,则走我们自己重写的onCreateView方法。

5.如果RecyclerView宽高没有写死,onMeasure就会执行完子View的measure和Layout方法,
onLayout仅仅是重置一些参数,如果写死,子View的measure和layout会延后到onLayout中执行。


RecycledViewPool  createViewHolder 

mAttachedScrap 0-9,9-0 mCacheViews ViewCacheExtension RecycledViewPool

mCacheViews    recyclerInstance

Recycle removeViewAt     ScrapViews   detachViewAt  scrapView ViewHolder


recycleCachedViewAt addViewHolderToRecycledViewPool 
 

      mAdapter.bindViewHolder(holder, offsetPosition);

            https://upload-images.jianshu.io/upload_images/7866586-0049e05aafd34a1d.png?imageMogr2/auto-orient/strip|imageView2/2/w/706/format/webp
            onBindViewHolder

onCreateViewHolder

RecycledViewPool复用ImageViewHolder


notifyItemRemoved


1.CacheViews中的缓存只能position相同才能复用,并且不会重新Bind.
2.CacheViews满了后会移除到RecyclerPool中,并重置ViewHolder.
3.RecyclerPool中的缓存复用需要重新Bind.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值