onLayoutChildre 會調用 detachAndScrapAttachedViews
分離 ViewHolder 存儲到相應的緩存(Recycler)
中去
這裏拿出了 LinearLayoutManger 佈局的流程(簡單的過程):
這裏簡單的講解下 onLayoutChildren 的 fill 邏輯
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
detachAndScrapAttachedViews(recycler);
// 繪製流程(從上往下,從下往上)
if (mAnchorInfo.mLayoutFromEnd) {
// fill towards start
updateLayoutStateToFillStart(mAnchorInfo);
fill(recycler, mLayoutState, state, false);
// fill towards end
updateLayoutStateToFillEnd(mAnchorInfo);
fill(recycler, mLayoutState, state, false);
} else {
// fill towards end
updateLayoutStateToFillEnd(mAnchorInfo);
fill(recycler, mLayoutState, state, false);
// fill towards start
updateLayoutStateToFillStart(mAnchorInfo);
fill(recycler, mLayoutState, state, false);
}
}
相關類 | 含義 |
---|---|
AnchorInfo |
繪製子View的時候,記錄其位置,偏移量,方向等信息 |
LayoutChunkResult |
加載子View結果情況的記錄,比如已經填充的子View的數量 |
LayoutState |
當前加載的狀態記錄,比如當前繪製的偏移量,屏幕還剩餘多少空間等 |