RecylerView 自定义 LayoutManager 基础一

来源:互联网 发布:ubuntu引导没有win10 编辑:程序博客网 时间:2024/06/05 12:07

前沿注意事项

ViewGroup 与 LayoutManger的区别

ViewGroup
自定义ViewGroup是一种静态的Layout子View的过程,因为ViewGroup内部不支持滑动,所以只需要无脑的Layout出所有的View,便不操心剩下的事情

LayoutManager
第一步: 在layout,千万不要layout出 所有的子View
##否则 初始化数据 100000条时,那么就准备ANR吧
第二步:在合适的时机回收 不可见的旧View, 复用子View Layout新的子View
第三部:滑动 交由 ItemTouchHelper

引发思考的一些问题

问题:初始化时 onlayoutChildRen() 为什么执行两次
答案:两次分别调用

第一次: RecylerView的 onMeasure()
在OnMeasure内部 调用 dispatchLayoutStep2()
该方法内部会调用 mLayout.onLayoutChildren(mRecycler, mState)

第二次: RecylerView的 onLayout()
在onLayout 内部调用 dispatchLayout()
该方法内部又调用 dispatchLayoutStep2()

基于上个问题,我们需要注意什么?

即使是在重写 onLayoutChildren() 方法时,也要考虑将屏幕上的子View(如果有)
detach掉,否则屏幕初始化时,同一个position 的 ViewHolder,也会 onCreateViewHolder 两次
因此 childCount也会翻倍。