在Android開發中經常用到ListView、GridView等串列,於是Adapter也就比較常用的了, 而實際專案中稍微複雜點的基本都會用到BaseAdapter, 大家都知道繼承自BaseAdapter必須要重寫getCount(), getItem(), getItemId(), getView()這幾個方法, 而且可能為了最佳化串列的載入還還會經常採用ViewHoder樣式, 試想串列多了估計都寫煩了吧,那麼今天就來教大家一種通用、簡潔的Adapter,以後你就可以幾行程式碼搞定一個複雜的Adapter了。
通用的SimpleBaseAdapter
首先我們來解決每次都重寫BaseAdapter的那幾個方法的問題,解決方案很簡單,直接寫一個抽象的SimpleBaseAdapter,程式碼如下
上面程式碼我不就過多解釋了,相信大家都能看懂。之後建立Adapter的時候只需要繼承自SimpleBaseAdapter,把List資料源傳進去,再重寫getView方法就好了。
通用的ViewHolder
上面的SimpleBaseAdapter已經大大減少了不少的重覆性工作,但是對於ViewHolder的最佳化依然還有很多重覆性的程式碼要寫,那麼下麵就來看看如何打造一個通用的ViewHolder。
關於ListView的最佳化這裡再多說下吧,主要是兩點:一是判斷convertView為空的時候才會inflate,復用item view,二便是使用ViewHoder樣式,透過convertView.setTag與convertView進行系結,然後當convertView復用時,直接從與之對於的ViewHolder(getTag)中拿到convertView佈局中的控制元件,省去了findViewById的時間~
下麵看我們的ViewHolder類:
可以看到這裡定義的ViewHolder程式碼很簡單,使用起來也是非常的輕便。SparseArray
最終的SimpleBaseAdapter
廢話不多說了,我們結合以上兩點,直接上個最終的SimpleBaseAdapter,由於程式碼有點長,圖片沒法完整的包含全部程式碼,大家可以在最後“閱讀原文”到我部落格檢視完整程式碼。
使用
自己的Adapter需要繼承SimpleBaseAdapter,並且實現getItemResource和getItemView兩個方法就好了, 下麵看下例子:
相信大家都能看懂,具體的xml佈局檔案就不寫出來了,上面的示例和google推薦的寫法類似,只不過稍加變通之後減少了很多重覆的程式碼, 是不是清爽了很多呢?
點選”閱讀原文“即可檢視原文部落格,大家如果覺得對你有幫助的話,不妨推薦身邊的朋友關註此賬號,如果有什麼建議或者推薦的可直接留言給我。