ListView等的Adapter優化

      衆所周知,Adapter是ListView與界面和數據之間的橋樑,通過Adapter中的gerView()方面來獲得界面要顯示的View,但你有沒有想過,當ListView中數據量很大時,如何對Adapter進行優化呢?

   以下有三種實現方式,具體來看一下。

  1.

public View getView(int position, View convertView, ViewGroup parent){
	final LayoutInflater inflater = (LayoutInflater) mContext.
						getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
	 View v = inflater.inflate(R.layout.list_item_icon_text, null);
	((ImageView) v.findViewById(R.id.icon)).setImageResource(R.drawable.icon);
	((TextView) v.findViewById(R.id.text)).setText(mData[position]);
	return v;
}

   這是最簡單的一種方式,沒有經過任何的優化,菜鳥級別的人很容易這樣做。

 

 2.

public View getView(int position, View convertView, ViewGroup parent){
	if(convertView == null){
		convertView = inflater.inflate(R.layout.list_item_icon_text, null);
	}
	((ImageView) v.findViewById(R.id.icon)).setImageResource(R.drawable.icon);
	((TextView) v.findViewById(R.id.text)).setText(mData[position]);
	return convertView;
}

  這是一種稍微改進的方式,有形成每個ListView的item時,每個Item的容器對象進行了重得利用。

 

 3.

public View getView(int position, View convertView, ViewGroup parent) {
	ViewHolder holder;
	if (convertView == null) {
		final LayoutInflater inflater = (LayoutInflater) mContext
			           .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		convertView = inflater.inflate(R.layout.list_item_icon_text, null);
		holder = new ViewHolder();
		holder.icon = (ImageView) convertView.findViewById(R.id.icon);
		holder.text = (TextView) convertView.findViewById(R.id.text);
		convertView.setTag(holder);
	} else {
		holder = (ViewHolder) convertView.getTag();
	}
	holder.icon.setImageResource(R.drawable.icon);
	holder.text.setText(mData[position]);
	return convertView;
}  

static class ViewHolder {
	ImageView icon;
	TextView text;
}

 這是09年Google IO大會上給出的優化建議,經過改進後,在處理大量數據的時候,確實流暢了很多。

 

文章參照:

http://www.ideasandroid.com/archives/295

http://www.cnblogs.com/halzhang/archive/2010/12/05/1896791.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章