直接繼承自AbsListView,AbsListView繼承自AdapterView,AdapterView又繼承自ViewGroup。
Adpater在ListView和數據源之間起到了一個橋樑的作用
RecycleBin機制
RecycleBin機制是ListView能夠實現成百上千條數據都不會OOM最重要的一個原因。RecycleBin是AbsListView的一個內部類。
- RecycleBin當中使用mActiveViews這個數組來存儲View,調用這個方法後就會根據傳入的參數來將ListView中的指定元素存儲到mActiveViews中。
- mActiveViews當中所存儲的View,一旦被獲取了之後就會從mActiveViews當中移除,下次獲取同樣位置的時候將會返回null,所以mActiveViews不能被重複利用。
- addScrapView()用於將一個廢棄的View進行緩存,該方法接收一個View參數,當有某個View確定要廢棄掉的時候(比如滾動出了屏幕)就應該調用這個方法來對View進行緩存,RecycleBin當中使用mScrapV
- iews和mCurrentScrap這兩個List來存儲廢棄View。
- getScrapView 用於從廢棄緩存中取出一個View,這些廢棄緩存中的View是沒有順序可言的,因此getScrapView()方法中的算法也非常簡單,就是直接從mCurrentScrap當中獲取尾部的一個scrap view進行返回。
- 我們都知道Adapter當中可以重寫一個getViewTypeCount()來表示ListView中有幾種類型的數據項,而setViewTypeCount()方法的作用就是爲每種類型的數據項都單獨啓用一個RecycleBin緩存機制。
View的流程分三步,onMeasure()用於測量View的大小,onLayout()用於確定View的佈局,onDraw()用於將View繪製到界面上。