Android: RecyclerView.ViewHolder、Adapter
1.簡介
?用戶滑動屏幕切換視圖時,上一個視圖會回收利用,RecyclerView所做的就是回收再利用,循環往復。
-
ViewHolder
?ViewHolder的主要任務:容納View視圖。 -
Adapter
?Adapter從模型層獲取數據,然后提供給RecyclerView顯示,是溝通的橋梁。 -
Adapter主要的任務是:創建ViewHolder和將模型層的數據綁定到ViewHolder上。
RecyclerView與Adapter交互流程
?
?
?首先,調用Adapter.getItemCount()方法,RecyclerView詢問數組列表中包含多少個待展示的視圖。
?接著,RecyclerView調用Adapter.onCreateViewHolder(ViewGroup, int)創建ViewHolder。
?最后,RecyclerView會傳入ViewHolder及其位置(position),調用onBindViewHolder(ViewHolder, int)方法。Adapter會找到目標位置的數據并將其綁定到ViewHolder的視圖上。
?需要注意的是相對于onBindViewHolder(),onCreateViewHolder()方法調用并不頻繁。一旦有了夠用的ViewHolder,RecyclerView就會停止調用onCreateViewHolder()方法。隨后,它會回收利用舊的ViewHolder以節約時間和內存。
- LayoutManager
?RecyclerView不會親自擺放屏幕上的列表項,擺放列表項的任務被委托給了LayoutManager。除了在屏幕上擺放列表項,LayoutManager還負責定義屏幕滾動行為。
?除了一些Android系統內置版實現,LayoutManager還有很多第三方庫實現版本。
2.ViewHolder
?ViewHolder承載的是每一個列表項的視圖,所以當使用RecyclerView的時候需要先對ViewHolder進行初始化定義。
private class CrimeHolder extends RecyclerView.ViewHolder {public CrimeHolder(LayoutInflater inflater, ViewGroup parent) {super(inflater.inflate(R.layout.list_item_crime, parent, false));} }?注意到CrimeHolder構造器方法調用了父類構造器super(View view)----ViewHolder(View view)。因而CrimeHolder實際上引用了已被實例化的list_item_crime布局的視圖,且同時這個視圖被賦給了父類變量itemView,我們可以在itemView變量處獲得該視圖。
3.Adapter
?當需要顯示新創建的ViewHolder或讓數據和已創建的ViewHolder關聯時,就會用到Adapter。在Adapter中通常需要實現3個方法:
- onCreateViewHolder(ViewGroup parent, int viewType)
?當需要新的ViewHolder來顯示列表項時,會調用onCreateViewHolder方法去創建ViewHolder。
- onBindViewHolder(CrimeHolder holder, int position)
?將數據綁定在ViewHolder上。
- getItemCount()
?返回總共要顯示的列表的數量(創建的ViewHolder數量比前者要小得多)。
?
總結
以上是生活随笔為你收集整理的Android: RecyclerView.ViewHolder、Adapter的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android: Bundle机制
- 下一篇: epoll深入解读