RecyclerView API官方文件譯文
RecyclerView
added in version 22.1.0
belongs to Maven artifact
com.android.support:recyclerview-v7:27.0.0
繼承關係
已知直接子類
已知間接子類
一個在有限的視窗中展示大型資料集的靈活檢視。
專業術語
- Adapter:RecyclerView.Adapter 的子類,負責提供一個數據集中的各個專案的檢視。
- Position:介面卡中的資料項的位置。
- Index:呼叫 getChildAt(int) 方法時的子檢視的索引。與位置相對應。
- Binding
- Recycle (view):一個之前用於顯示介面卡中具體位置的資料並可存於快取中用於之後顯示同種型別資料的檢視。通過跳過佈局初始化或者佈局建立,可以大幅度的提升效能。
- Scrap (view):一個在佈局過程中進入臨時性分離狀態的子檢視。它們可以重複使用而不會完全脫離父 RecyclerView,不論是不需要重新繫結未發生更改還是被介面卡認為是髒的而發生了更改。
- Dirty (view):一個在顯示之前必須由介面卡還原的檢視。
RecyclerView 中的位置
RecyclerView 是為了能夠在佈局計算過程中檢測資料集的批量變化而從
因此,RecyclerView 中有兩種與位置相關聯的方法:
- layout position:子專案在最新的佈局計算中的位置。這是從 LayoutManager(佈局管理者) 的角度來看的。
- adapter position:子專案在介面卡中的位置。這是從介面卡的角度來看的。
除了發起 adapter.notify() 事件和計算更新後的佈局之間的時間外,這兩個位置是相同的。
任何返回或者接收 LayoutPosition 的方法都使用最新的佈局計算位置(如:getLayoutPosition(), findViewHolderForLayoutPosition(int))。這些位置包含了直到最後一次的佈局計算為止的所有更改。可以依靠這些位置來與使用者當前在螢幕中看到的內容保持一致。例如,如果在螢幕上有一個專案列表,使用者請求檢視第五個元素,則應該使用這些方法來與使用者正在看到內容進行匹配。
另一組與位置相關的方法是 AdapterPosition 的形式(如:getAdapterPosition(), findViewHolderForAdapterPosition(int))。當需要使用最新的介面卡位置時,即使它們尚未反映到佈局中,也應該使用這些方法。例如,如果你想通過 ViewHolder 的點選來訪問介面卡中的子專案,就應該使用 getAdapterPosition() 。請注意,如果 notifyDataSetChanged() 已被呼叫且尚未完成新佈局的計算,則這些方法可能無法計算介面卡的位置。因此需要小心的處理這些方法中的 NO_POSITION 或者為空的結果。
當編寫一個 RecyclerView.LayoutManager 時要使用佈局位置,而在編寫一個 RecyclerView.Adapter 則需要使用介面卡位置。