亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ListView適配器中的findViewById與View Holder模式

ListView適配器中的findViewById與View Holder模式

千萬里不及你 2019-10-09 15:09:50
我總是用LayoutInflater和findViewById在創建新項目getView的方法Adapter。但是在許多文章中,人們寫道這findViewById非常慢,強烈建議使用“視圖持有者模式”。誰能解釋為什么findViewById這么慢?以及為什么視圖持有者模式更快?如果需要向中添加不同的項目,該ListView怎么辦?我應該為每種類型創建類嗎?static class ViewHolderItem1 {    TextView textViewItem;}static class ViewHolderItem2 {    Button btnViewItem;}static class ViewHolderItem3 {    Button btnViewItem;    ImageView imgViewItem;}
查看完整描述

2 回答

?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

ViewHolder模式將創建ViewHolder的靜態實例,并將其在第一次加載時附加到視圖項,然后在以后的調用中從該視圖標記中檢索它。我們知道getView()方法非常頻繁地被調用,特別是當列表視圖中的許多元素要滾動時,實際上,每次列表視圖項在滾動時可見時都會調用該方法。


ViewHolder Pattern可以防止findViewById()多次被不必要地調用,將視圖保持在靜態引用上,這是節省一些資源的好模式(尤其是當您需要在listview項中引用很多視圖時)。


說得很好 @RomainGuy


ViewHolder也可以并且應該用于存儲臨時數據結構,以避免在getView()中分配內存。ViewHolder包含一個char緩沖區,以避免從Cursor獲取數據時進行分配。


查看完整回答
反對 回復 2019-10-09
  • 2 回答
  • 0 關注
  • 999 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號