概覽
<p>一種用于在有限的窗口顯示大量數(shù)據(jù)集合的組件将饺。</p>
術(shù)語
- 適配器:RecycleView.Adapter的子類舰讹,為數(shù)據(jù)集合中的條目提供視圖娃承。
- 位置:適配器中的數(shù)據(jù)條目的位置
- 索引:用于獲得子視圖組件,常常用于getChildAt(int)中桩匪。
- 捆綁/粘合/綁定:一個將適配器中特定位置的數(shù)據(jù)綁定在子視圖中的動作打瘪。
- 回收:指一個之前用于顯示適配器中數(shù)據(jù)的視圖并存在緩沖區(qū)中,之后被用來顯示同樣類型的數(shù)據(jù)傻昙。通過忽略布局的初始化和構(gòu)造函數(shù)闺骚,這可以顯著提高性能。
- Scrap:待補(bǔ)充
- Dirty:待補(bǔ)充
RecycleView中的位置
在RecycleView.Adatper和RecycleView.LayoutManager中妆档,RecycleView引進(jìn)了額外的抽象層次以監(jiān)聽不具計算中數(shù)據(jù)集合的批量變化僻爽。這為LayoutManager在追蹤適配器變化計算動畫時省下不少功夫。同時贾惦,這也可以為所有視圖捆綁和避免不必要的捆綁中提高性能胸梆。
因此,在RecycleView中的相關(guān)方法中须板,有兩種類型的位置碰镜。
- 布局位置:從LayoutManager的角度看,條目在最新布局計算中的位置习瑰。
- 適配器位置:從適配器的角度看绪颖,條目在是適配器中的位置。
這兩種類型的位置是等同的甜奄,除非在分發(fā)adapter.notify*事件和更新布局時菠发。
返回布局位置的方法使用最近一次布局運算后的位置,如getLayoutPosition()和findViewHolderForLayoutPosition(int)贺嫂。這些位置包含了最近一次布局運算后的變化滓鸠。你可以根據(jù)這些位置來與用戶正在屏幕上看到的保持一致。比如第喳,你有一個條目列表糜俗,當(dāng)用戶請求第5個條目時,你可以使用這些方法來匹配用戶看到的曲饱。
另外一系列方法與AdapterPosition關(guān)聯(lián)悠抹,比如getAdapterPosition()和findViewHolderForAdapterPosition(int)。當(dāng)你想獲得條目在更新后的適配器中的位置使用這些方法扩淀,即使這些位置變化還沒反映到布局中楔敌。比如,你想訪問適配器中條目的位置時驻谆,就應(yīng)該使用getAdapterPosition()卵凑。注意庆聘,如果notifyDataSetChanged()已經(jīng)被調(diào)用而且還沒計算新布局,這些方法或許不能夠計算適配器位置勺卢。所以伙判,你要小心處理這些方法返回NO_POSITION和null的情況。
總之黑忱,當(dāng)使用RecycleView.LayoutManager時使用布局位置宴抚。與此同時,使用RecycleView.Adapter時甫煞,使用適配器位置菇曲。
內(nèi)部靜態(tài)抽象類Adapter
該類是適配器的基類,為顯示在RecycleView視圖中的數(shù)據(jù)和RecycleView中的視圖提供粘合抚吠。
內(nèi)部靜態(tài)抽象類ViewHolder
一個ViewHolder描述了一個條目視圖和有關(guān)在RecycleView中的位置信息常潮。
RecycleView.Adapter的實現(xiàn)應(yīng)該繼承ViewHolder并添加開銷較大的方法findViewById(int).
ViewHolders之于Adapter,就像RecycleView.LayoutParams之于Recycle.LayoutManager.
以上翻譯還差些火候和內(nèi)涵埃跷,待以后對RecycleView的理解加深后修改蕊玷。