1. 程式人生 > >ViewHolder的另一種寫法

ViewHolder的另一種寫法

每為一個AdapterView寫Adapter介面卡,你是否都會建立 一個static的ViewHolder類來負責臨時儲存ItemView?不用回答我也已經聽見了你的抱怨,那麼下面為大家介紹另外一種我經常使用的寫法,從此和無盡的ViewHolder說拜拜,而且不會影響頁面載入的效能。

Android為開發者提供了ListView和GridView這兩個常用於顯示列表的控制元件。在不使用ViewHolder的情況下過程中,列表子View數量不多的情況下,可能不大看的出列表載入效能上的差異。但是相信在菜鳥階段的時候,每一位都親測過在上述情況下,列表展示較多資料時載入是何等的坑爹,會出現滑動不暢呀的現象。出現的原因呢就是因為載入了過多的子View,每一個子View都需要查詢id呀,介面重繪呀等操作,這樣導致了記憶體開銷過大以及手機繪圖的效率跟不上,才會出現前面我們說的滑動較卡的現象。所以Android為我們開發者提供了標準的ViewHolder的寫法來重用列表的ItemView,來避免出現上述兩個問題。最標準的寫法,就是為每一個AdapterView的子View新建一個對應的ViewHolder,同時宣告為prtivate final static。

好了,背景介紹完畢,上程式碼。


上面兩張圖片展示了ViewHolder和它的使用。可以看到這裡定義的ViewHolder程式碼是十分的簡單,使用起來也是非常的輕便。而且這種程式碼的寫法也完全等價於谷歌官方推薦我們使用的做法。看到這裡是不是很愜意呀!


SparseArray<View>在程式碼理解上等價於HashMap<Interger, View>,SparseArray是Android提供的一個數據結構,旨在提高查詢的效率。所以View childView = viewHolder.get(id);這句程式碼的時間上的開銷是極小的,完全不會影響到執行的效率。