当前位置: 移动技术网 > IT编程>移动开发>Android > Android ListView适配器(Adapter)优化方法详解

Android ListView适配器(Adapter)优化方法详解

2019年07月24日  | 移动技术网IT编程  | 我要评论

奢宠甜妻,四季养生之道,无限挑战120908

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, view convertview, 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, view convertview, 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;
}

怎么样?会不会又给您的系统带来很大的提升呢?看看下面三种方式的性能对比图您就知道了!

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网