內容來源與《第一行代碼》
在 getView 方法中優(yōu)化
我們在使用ListView顯示數(shù)據(jù)時需要用到適配器钾腺,這里我們用的是 ArrayAdapter , 這里舉例用的是顯示水果的圖片以及名稱站超,如下所示:
首先創(chuàng)建一個適配器來繼承于ArrayAdapter,就叫 FruitAdapter坊饶,并重寫父類的 getView 方法损同。在這個方法里面對我們自定義的 Item 進行繪制谍咆,系統(tǒng)加載一條一條Item時逝段,都會執(zhí)行 getView 方法,所有我們的優(yōu)化也選擇在此方法中议街。未優(yōu)化之前的代碼如下:
系統(tǒng)每次運行getView方法時都會設置 item 的布局泽谨,重新獲取控件的ID,ListView的item離開可視區(qū)域再重新進入又會重新繪制,好在getView的第二個參數(shù) convertView 就是用來緩存view的吧雹,假如我們的view已經繪制過骨杂,那么在 convertView中就存儲對應的view;而反復獲取控件ID的解決方法可以利用view的 setTag 方法來存儲控件ID雄卷,控件ID與對應view捆綁起來搓蚪,當view存在緩存而不用重新創(chuàng)建時,從view 中用 getTag 方法獲取控件ID來做賦值操作丁鹉。優(yōu)化后代碼如下:
每次進入 getView 時判斷 convertView 是否為空來決定是否重新繪制妒潭,這里創(chuàng)建一個 ViewHolder 類來存儲控件ID,最后通過 view.setTag 方法將該類存儲進去揣钦。