Android基礎——快速開發之打造萬能適配器
這裏以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基礎——快速開發之打造萬能適配器