当前位置:操作系统 > 安卓/Android >>

Android 开发ListView适配器优化

我们都知道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;  
}  
 
补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,