AndroID ListVIEw的优化,在做AndroID项目的时候,在用到ListVIEw 界面及数据显示,这个时候如果资源过大,对项目来说,用户体验肯定是不好的,这里就对如何优化做了详细介绍:
Adapter的作用就是ListVIEw界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getVIEw方法返回一个VIEw。想过没有? 在我们的列表有1000000项时会是什么样的?是不是会占用极大的系统资源?
ListVIEw的Adapter的作用如下图所示:
先看看下面的代码:
public VIEw getVIEw(int position,VIEw convertVIEw,VIEwGroup parent) {VIEw item = 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);return item;}
怎么样?如果超过1000000项时,后果不堪设想!您可千万别这么写!
我们再来看看下面的代码:
public VIEw getVIEw(int position,VIEwGroup parent) {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);return convertVIEw;}
怎么样,上面的代码是不是好了很多?系统将会减少创建很多VIEw。性能得到了很大的提升。
还有没有优化的方法呢? 答案是肯定的:
public VIEw getVIEw(int position,VIEwGroup parent) {VIEwHolder holder;if (convertVIEw == null) {convertVIEw = mInflater.inflate(R.layout.List_item_icon_text,null);holder = new VIEwHolder();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);return convertVIEw;}static class VIEwHolder {TextVIEw text;ImageVIEw icon;}
怎么样?会不会又给您的系统带来很大的提升呢?看看下面三种方式的性能对比图您就知道了!
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
总结以上是内存溢出为你收集整理的Android ListView适配器(Adapter)优化方法详解全部内容,希望文章能够帮你解决Android ListView适配器(Adapter)优化方法详解所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)