我總是用LayoutInflater和findViewById在創(chuàng)建新項目getView的方法Adapter。但是在許多文章中,人們寫道這findViewById非常慢,強烈建議使用“視圖持有者模式”。誰能解釋為什么findViewById這么慢?以及為什么視圖持有者模式更快?如果需要向中添加不同的項目,該ListView怎么辦?我應(yīng)該為每種類型創(chuàng)建類嗎?static class ViewHolderItem1 { TextView textViewItem;}static class ViewHolderItem2 { Button btnViewItem;}static class ViewHolderItem3 { Button btnViewItem; ImageView imgViewItem;}
2 回答

絕地?zé)o雙
TA貢獻1946條經(jīng)驗 獲得超4個贊
ViewHolder模式將創(chuàng)建ViewHolder的靜態(tài)實例,并將其在第一次加載時附加到視圖項,然后在以后的調(diào)用中從該視圖標(biāo)記中檢索它。我們知道getView()方法非常頻繁地被調(diào)用,特別是當(dāng)列表視圖中的許多元素要滾動時,實際上,每次列表視圖項在滾動時可見時都會調(diào)用該方法。
ViewHolder Pattern可以防止findViewById()多次被不必要地調(diào)用,將視圖保持在靜態(tài)引用上,這是節(jié)省一些資源的好模式(尤其是當(dāng)您需要在listview項中引用很多視圖時)。
說得很好 @RomainGuy
ViewHolder也可以并且應(yīng)該用于存儲臨時數(shù)據(jù)結(jié)構(gòu),以避免在getView()中分配內(nèi)存。ViewHolder包含一個char緩沖區(qū),以避免從Cursor獲取數(shù)據(jù)時進行分配。
- 2 回答
- 0 關(guān)注
- 995 瀏覽
添加回答
舉報
0/150
提交
取消