ListView詳解

直接繼承自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繪製到界面上。

發佈了32 篇原創文章 · 獲贊 10 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章