說說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);這句代碼的時間上的開銷是極小的,完全不會影響到執行的效率。

今天的代碼很少,就不爲大家提供源碼了,也就上面區區十來行。最後希望可以幫到各位在碼農一線工作的朋友。

如果覺得對你有所幫助,歡迎大家訂閱我的微信公衆賬號——Android乾貨分享。下面是微信的二維碼,爲你提供及時高質的Android乾貨。技術交流QQ羣:318588906,歡迎大家加羣,共同探討下Android和Java技術,一起壯大我們的微信乾貨分享社區。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章