Android ListView适配器(Adapter)优化方法详解
程序员文章站
2024-03-01 12:16:52
android listview的优化,在做android项目的时候,在用到listview 界面及数据显示,这个时候如果资源过大,对项目来说,用户体验肯定是不好的,这里就...
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; }
怎么样?会不会又给您的系统带来很大的提升呢?看看下面三种方式的性能对比图您就知道了!
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
上一篇: win32 创建进程三种方式简单示例 - 使用CFree
下一篇: Redis 数据类型之有序集
推荐阅读
-
Android ListView适配器(Adapter)优化方法详解
-
详解Android中实现ListView左右滑动删除条目的方法
-
详解Android应用中ListView列表选项栏的编写方法
-
详解Android中实现ListView左右滑动删除条目的方法
-
Android ListView异步加载图片方法详解
-
详解Android应用中ListView列表选项栏的编写方法
-
Android操作SQLite数据库(增、删、改、查、分页等)及ListView显示数据的方法详解
-
Android ListView异步加载图片方法详解
-
Android操作SQLite数据库(增、删、改、查、分页等)及ListView显示数据的方法详解
-
浅谈Android开发中ListView控件性能的一些优化方法