RecycledView源码解析

    技术2022-07-20  58

     

    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.

     

    Processed: 0.022, SQL: 9