最佳化ListView,可以最佳化適配器,在複寫public View getView(int
position, View convertView, ViewGroupparent)的方法時候,要複用convertView這個“曆史”View對象。代碼:
public class Appmanaget_adapterextends BaseAdapter
{
private List<App>lis;//需要在listview中顯示的資料的List的APP實體類集合集合。
//App中包好一個Drawable類型的icon和一個String類型的appName的屬性
private Contextcontext;
//填充item的資源檔中包含ImageView,和TextView兩控制項
//將要在listview的item中顯示的控制項聲明成靜態,減少運行時ImageView,ImageView執行個體
privatestatic ImageViewiv;
privatestatic TextViewtv;
public Appmanaget_adapter(List<App> lis,Context context){
super();
this.lis = lis;
this.context=context;
}
@Override
publicint getCount() {
returnlis.size();
}
@Override
public Object getItem(int position) {
returnlis.get(position);
}
@Override
publiclong getItemId(int
position) {
return position;
}
@Override
public View getView(int position, View convertView,
ViewGroupparent) {
View v = null;
//convertView可以理解為一個曆史的view控制項
if(convertView==null){
//如果convertView為null,就要對v進行初始化,View.inflate(context,//R.layout.adaper_appmanager,
null);
//這個需要消耗比較大的時間
v=View.inflate(context, R.layout.adaper_appmanager,null);
}else{
//如果convertView不為null,說明有一個Item被使用者滾動出的螢幕,這個時候要顯示新的item就可以複用這個convertView了,
//就不用再進行View.inflate,在listview要顯示比較多的item時候,就能提高很大效率
v=convertView;
}
iv=(ImageView) v.findViewById(R.id.adapter_appmanager_iv_appIcon);
tv=(TextView) v.findViewById(R.id.adapter_appmanager_tv_appName);
iv.setImageDrawable(lis.get(position).getIcon());
tv.setText(lis.get(position).getAppName());
return v;
}
}