1. 程式人生 > >Android基礎——快速開發之打造萬能適配器

Android基礎——快速開發之打造萬能適配器

臃腫 log 思想 代碼分析 htm 考試報名 做了 順序 基礎

這裏以ListView作演示,對於ListView我們再熟悉不過了,其步驟分為:

  • 創建ListView的Bean對象
  • 創建ListView的Adapter的ItemView布局
  • 創建ListView的Adaoter(**重點)
  • 對ListView設置Adapter

一、創建ListView的Bean對象

這裏以學生信息為例

二、創建ListView的Adapter的ItemView布局

其最終效果為

技術分享圖片

三、創建ListView的Adaoter

這裏采用官網的Adapter推薦寫法,【你可以發現:Adapter緩存的只是每個ItemView的ViewHolder】

如果我們需要填充ItemView很多,那麽getView()方法裏面的代碼會變得臃腫,難以閱讀和修改,那我們就來美化一下代碼吧

四、對ListView設置Adapter

容我一個強迫癥的人先把這一點寫完

這裏我們就只看Adapter的代碼美化,具體看getView()這個方法裏面的內容,前面說了,Adapter緩存的只是ViewHolder,那麽我們抽取這個ViewHolder

我們將中間的getView()裏的findViewById()和convertView.setTag()抽取出來,如果要添加新的View,只需要在ViewHolder類中添加即可,我們可以看到不管對View添加多少,在getView()方法中只需要一句話,ViewHolder viewHolder=getViewHolder(convertView)

從上面的代碼分析,在我們萬能的ViewHolder類需要做什麽:

  • convertView緩存的是ViewHolder(所以我們需要一個convertView,作為ViewHolder的屬性)
  • getViewHolder的代碼固定的(所以我們需要提供一個getViewHolder()方法將其鎖死)
  • findViewById每次增加View的時候都要執行(所以我們需要抽象一個方法來getView())

下面我們創建一個ViewHolder類(ViewHolder簡單的理解為View的管理器)

ViewHolder類做了兩件事情:

  • getViewHolder()拿到這個ViewHolder對象
  • 通過viewHolder.getView()方法來對View進行填充數據

萬能Adapter很簡單,就是在類裏面用泛型T表示傳進來的Bean對象,剩下的就是調用ViewHolder的事情

我們知道ViewHolder只是做了兩件事情,那麽我們就可以在Adapter中,雅思考試報名費調用這兩件事情

我們看到getView()裏的代碼還是很多,不美觀,根據面向對象的思想,我們可以將其抽取為一個抽象方法,讓我們的前臺去填充這個View

這個時候getView()裏面的代碼就只剩下一句話了

傳統的使用:

萬能Adapter的使用:

  • 兩者比較有好有壞,傳統的前臺代碼簡潔,而萬能適配器的代碼臃腫,不過萬能適配器可以適配各種ListView和GridView
  • 如果不明白的話,將萬能適配器代碼調用,一層一層的往回拼湊,最後執行的代碼順序還是和官網推薦的一樣,只不過他用泛型T來讓所有對象都適用

Android基礎——快速開發之打造萬能適配器