我們都知道Android中Adapter的作用就是ListView介面與資料之間的橋樑,當列表裡的每一項顯示到頁面時,都會調用Adapter的getView方法返回一個View。想過沒有? 在我們的列表有1000000項時會是什麼樣的?是不是會佔用極大的系統資源? 看看下面的代碼:[java] publicViewgetView(intposition,ViewconvertView,ViewGroupparent){ Viewitem=mInflater.inflate(R.layout.list_item_icon_text,null); ((TextView)item.findViewById(R.id.text)).setText(DATA[position]); ((ImageView)item.findViewById(R.id.icon)).setImageBitmap( (position&1)==1?mIcon1:mIcon2); returnitem; } 大家不用我說也知道是怎麼樣了。如果超過1000000項時,後果不堪設想!您可千萬別這麼寫! 再來看看下面的代碼:[java] publicViewgetView(intposition,ViewconvertView,ViewGroupparent){ if(convertView==null){ convertView=mInflater.inflate(R.layout.item,null); } ((TextView)convertView.findViewById(R.id.text)).setText(DATA[position]); ((ImageView)convertView.findViewById(R.id.icon)).setImageBitmap( (position&1)==1?mIcon1:mIcon2); returnconvertView; } 怎麼樣,上面的代碼是不是好了很多?系統將會減少建立很多View。效能得到了很大的提升。 當然還有更最佳化的代碼: [java] publicViewgetView(intposition,ViewconvertView,ViewGroupparent){ ViewHolderholder; if(convertView==null){ convertView=mInflater.inflate(R.layout.list_item_icon_text,null); holder=newViewHolder(); holder.text=(TextView)convertView.findViewById(R.id.text); holder.icon=(ImageView)convertView.findViewById(R.id.icon); convertView.setTag(holder); }else{ holder=(ViewHolder)convertView.getTag(); } holder.text.setText(DATA[position]); holder.icon.setImageBitmap((position&1)==1?mIcon1:mIcon2); returnconvertView; } staticclassViewHolder{ TextViewtext; ImageViewicon; }