日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

ListView 使用 ViewHolder

 My鏡像站 2012-02-07
Adapter是ListView界面與數(shù)據(jù)之間的橋梁,當(dāng)列表里的每一項(xiàng)顯示到頁面時(shí),都會(huì)調(diào)用Adapter的getView方法返回一個(gè)View。如果列表中有很多的項(xiàng)時(shí)會(huì)占用極大的系統(tǒng)資源,所以我們需要優(yōu)化Adapter

1、convertView的使用
  1. Java代碼   
  2. public View getView(int position, View convertView, ViewGroup parent) {   
  3. ViewHolder holder;   
  4. if (convertView == null)   
  5. {   
  6. //加載ListView item的布局文件   
  7. convertView = mInflater.inflate(R.layout.list_item_icon_text, null);   
  8. holder = new ViewHolder();   
  9. holder.text = (TextView) convertView.findViewById(R.id.text);   
  10. holder.icon = (ImageView) convertView.findViewById(R.id.icon);   
  11. /**  
  12. * 利用holder,調(diào)用convertView.setTag函數(shù)  
  13. * 使得convertView創(chuàng)建的內(nèi)存地址,不為空。  
  14. * 然后調(diào)用getTag來獲得當(dāng)前位置的tag  
  15. * 最后利用holder的各種set操作來替換當(dāng)前位置的tag。  
  16. */   
  17. convertView.setTag(holder);   
  18. }   
  19. else   
  20. {   
  21. holder = (ViewHolder) convertView.getTag();   
  22. }   
  23. holder.text.setText(DATA[position]);   
  24. holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);   
  25. return convertView;   
  26. }   
  27. static class ViewHolder {   
  28. private TextView text;   
  29. private ImageView icon;   
  30. }   


上面這種方式對(duì)于每個(gè)View使用了一個(gè)ViewHolder來控制其內(nèi)部的子item還使用了setTag和getTag的方法 將holder綁定到了view上而不是直接的新建View 是對(duì)Adapter的優(yōu)化。

2、測(cè)試getView被調(diào)用的次數(shù)
假設(shè)做一個(gè)動(dòng)態(tài)刷新的ListView,發(fā)現(xiàn)顯示的adapter.notifyDataSetChanged()的速度有點(diǎn)慢 那么可以測(cè)試下getView調(diào)用的次數(shù) 是不是太多。調(diào)用的次數(shù)多的讓你覺著莫名其妙 那么說明 肯定是有問題的 一定會(huì)影響性能的。
更改方法:
Xml代碼
  1. <ListView android:id="@+id/list"   
  2. android:layout_width="fill_parent"   
  3. android:layout_height="wrap_content" />   



將android:layout_height="wrap_content"修改成:android:layout_height="fill_parent"就可以了。
如果更改以后沒用,ListView周圍的控件也是"wrap_content"那么也需要修改。

3、關(guān)于ListView 對(duì)于純色的item背景 其實(shí)可以直接設(shè)置BackgroundColor 而不要使用圖片 這一部分其實(shí)可以有不小的提升 同樣的 對(duì)于任何純色的背景 應(yīng)該盡量去設(shè)置RGB顏色 而不是全用一張圖片做背景。 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多