`
zhuqiang5138
  • 浏览: 32356 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

ListView刷新慢 注意点

阅读更多
Adapter是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。如果列表中有很多的项时会占用极大的系统资源,所以我们需要优化Adapter

1、convertView的使用
public View getView(int position, View convertView, ViewGroup parent) {  
	ViewHolder holder;  
	if (convertView == null) 
	{  
		//加载ListView item的布局文件
		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); 
		/**
		 * 利用holder,调用convertView.setTag函数
		 * 使得convertView创建的内存地址,不为空。
		 * 然后调用getTag来获得当前位置的tag
		 * 最后利用holder的各种set操作来替换当前位置的tag。
		*/
		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 {  
		private TextView text;  
		private ImageView icon;  
	} 

        上面这种方式对于每个View使用了一个ViewHolder来控制其内部的子item还使用了setTag和getTag的方法 将holder绑定到了view上而不是直接的新建View 是对Adapter的优化。

2、测试getView被调用的次数
        假设做一个动态刷新的ListView,发现显示的adapter.notifyDataSetChanged()的速度有点慢 那么可以测试下getView调用的次数 是不是太多。调用的次数多的让你觉着莫名其妙 那么说明 肯定是有问题的 一定会影响性能的。
更改方法:
<ListView android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />

将android:layout_height="wrap_content"修改成:android:layout_height="fill_parent"就可以了。
如果更改以后没用,ListView周围的控件也是"wrap_content"那么也需要修改。

3、关于ListView 对于纯色的item背景 其实可以直接设置BackgroundColor 而不要使用图片 这一部分其实可以有不小的提升 同样的 对于任何纯色的背景 应该尽量去设置RGB颜色 而不是全用一张图片做背景。

参考:http://johncookie.iteye.com/blog/1250049
            http://stephen830.iteye.com/blog/1141532
分享到:
评论

相关推荐

    改善ListBox和ListView的响应能力

    然而,在处理大量数据时,这两个控件可能会出现性能问题,导致应用程序响应变慢甚至无响应。本篇将深入探讨如何通过优化策略来改善ListBox和ListView的响应能力,以提升用户体验。 1. **虚拟化技术**: 虚拟化是一...

    异步加载图片

    - `Loader`是更强大的异步数据加载框架,它可以监控数据源的变化并自动刷新UI,适合于ListView等需要实时更新的数据源。 3. **图片库的选择**: - Android社区有许多优秀的图片加载库,如Glide、Picasso、Fresco...

    Android性能优化典范 - 第1季 - 胡凯1

    例如,在执行动画或滑动ListView时,由于操作复杂性,容易发生丢帧现象。 - **过度绘制(Overdraw)**:过度绘制是指同一个像素在同帧时间内被绘制多次,造成CPU和GPU资源浪费。它可以由多层次UI结构、不可见UI的绘制...

    Android 用户界面编程技巧

    因此,在设计用户界面时,需要注意以下几点: - **图片资源**:尽量使用较小尺寸的图片,并在不再需要时释放资源。 - **对象引用**:避免长时间持有大对象的引用,及时清理不再使用的对象。 - **缓存策略**:合理...

    asp.net 在网上 实现分页

    这样既能减少一次性加载的数据量,又能避免页面加载过慢,提升用户体验。 在ASP.NET中,我们通常使用GridView、ListView或DataList等服务器控件来实现分页。这些控件内置了分页功能,只需设置相应的属性即可启用。...

    jQuery实现列表内容的动态载入特效

    这种技术常用于社交媒体、新闻网站或者任何需要展示大量列表数据的应用,以优化用户体验,避免一次性加载过多内容导致页面加载速度变慢。 首先,我们来看一下给出的CSS代码。这段CSS定义了列表的基本样式,如表格的...

    jQuery Mobile实例

    jQuery Mobile 使用 Ajax 进行页面导航,这使得页面之间可以平滑过渡,而无需完全刷新。然而,这可能会导致历史记录和书签出现问题,因此开发者需要了解如何正确配置 `data-ajax` 属性,以及何时使用 `data-rel=...

    vfp6.0系统免费下载

    应该注意,在 Internet Explorer 所运行的 Visual FoxPro ActiveDoc 只是一个应用程序文件(.app),它也可以在 Visual FoxPro 中直接运行。也正由于这个原因,需要有 Visual FoxPro 的运行时刻版本。Active ...

    安卓面试题

    - **分支管理**:Git分支操作简单快速,SVN分支操作较慢。 #### 54. Socket编程示例 - **TCP客户端**:使用Socket类建立连接。 - **TCP服务器**:使用ServerSocket监听客户端连接。 #### 55. 数据库分页查询 - **...

Global site tag (gtag.js) - Google Analytics