標籤:
1. ListView須要設定adapter,它的item是通過adapter的方法getView(int position, View convertView, ViewGroup parent)獲得的。
2. ListView中僅僅有第一屏的item須要建立,它的引用會被存在RecycleBin對象內,在拖動時後面的item實際上是重從了之前建立的item。3. 依據上述,ListView在須要顯示item時,最開始第一屏時,getView(int position, View convertView, ViewGroup parent )的第二個參數為null,顯示第二屏或者復原顯示第一屏時,getView(int position, View convertView, ViewGroup parent )第二個參數是一個原來緩衝的item,我們僅僅須要在getView中把它內部資料更新就可以。4. 假設item結構比較複雜,在更新一個已有的item內部資料的時候,尋找item內部每個元素也須要佔用不少資源,所以,能夠把這些內部元素的引用緩衝起來,直接對其賦值,最有效方法是把這些引用存到相應的item中,比較好的方法是使用setTag()方法。
據上四條,可得出:1. 在adapter的getView(int position, View convertView, ViewGroup parent)方法中,每次都new一個新的View返回,是效能最差的,浪費了ListView巧妙設計的一片苦心。2. 假設item內部元素簡單,getView中假設傳進來的view不為空白,直接為其賦值就可以。3. 假設item內部元素複雜,能夠使用Google IO 大會中討論的方法最佳化(例如以下):public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
holder = new ViewHolder();
holder.icon1 = (ImageView) convertView.findViewById(R.id.icon1);
holder.text1 = (TextView) convertView.findViewById(R.id.text1);
convertView.setTag(holder);
}
else{
holder = (ViewHolder)convertView.getTag();
}
holder.icon1.setImageResource(R.drawable.icon);
holder.text1.setText(mData[position]);
return holder;}static class ViewHolder {
TextView text1;
ImageView icon1;
}
參考:http://www.cnblogs.com/over140/archive/2011/03/23/1991100.html
ListView的最佳化