您的位置:首页 > 其它

listview加载性能优化及有多种listitem布局处理方式

2015-06-24 10:12 375 查看
转自:http://www.apkbus.com/forum.php?mod=viewthread&tid=243402

Android开发中 Listview是一个很重要的组件 ,它以列表的形式根据数据的长自适应展示具体内容。

用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候,会占据大量内存,影响性能,这时候就需要按需填充并重新使用view来减少对象的创建。

ListView加载数据都是在

[Java] 纯文本查看 复制代码

?
方法中进行的(要自定义listview都需要重写listadapter:如 BaseAdapter,SimpleAdapter,CursorAdapter的等的getvView方法),

优化listview的加载速度 就要让 convertView匹配列表类型,并 最大程度上的重新使用convertView 。

其中,getview的加载方法一般有以下 三种 加载 方式:
1、最慢的加载方式是每一次都重新定义一个View载入布局,再加载数据

[Java] 纯文本查看 复制代码

?
2、正确的加载方式是当 convertView不为空 的时候直接重新使用convertView从而减少了很多不必要的View的创建,然后加载数据

[Java] 纯文本查看 复制代码

?
3、最快的方式是 定义一个ViewHolder ,将convetView的tag设置为ViewHolder,不为空时重新使用即可

[Java] 纯文本查看 复制代码

?
三种方式加载效率对比如下图所示:



说明:上述三个例子代码摘自google 2010 I/O大会

当处理一些耗时的资源加载的时候需要做到以下几点,以使你的加载更快更平滑:

1. 适配器在界面主线程中进行修改

2. 可以在任何地方获取数据但应该在另外一个地方请求数据

3. 在主界面的线程中提交适配器的变化并调用notifyDataSetChanged()方法

===============================分割线=========================================

那么如果 存在多个item样式 如何处理呢??

大致思路就是 创建多个viewholder,在getViewType的时候设置不同位置的item用不同的viewholder ,

以下直接上代码:

[Java] 纯文本查看 复制代码

?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: