1.ListView如何和何时把child加入到自身中
在布局阶段使用AbsListView#onLayout()->ListView#layoutChildren()->RecycleBin#fillActiveViews(),ListView#fillFromTop(int nextTop)->ListView#fillDown(int pos, int nextTop)->makeAndAddView(int position, int y, boolean flow, int childrenLeft,
boolean selected)->setupChild(View child, int position, int y, boolean flowDown, int childrenLeft,
boolean selected, boolean recycled)
setupChild中不是我们通常使用addView的方法加入child,而是使用ViewGroup#attachViewToParent(View child, int index, LayoutParams params),这种方法和addView很大的区别是不会去触发requestLayout,而只是触发invalidate,就是说不会每添加一个child都重新测量。
ListView使用attachViewToParent添加child时不触发requestLayout,那么怎么确定child的width/height,left,top,right,bottom。把child attachViewToParent后ListView会在setupchild中为child准备MeasureSpec,然后调用child.measure()。测量完确定了width/height后,就确定child的left,top,right,bottom调用child.layout(),其实在调用setu