对Listview控件的效率优化

不管在Android平台还是IOS平台,Listview或者是类似控件,在数据显示方面都占据着相当重要的位置。而作为最重要的数据展示形式,Listview控件或者是类似的需要使用Adapter的控件的加载以及数据展示的效率和优化,就被摆在了一个很重要的位置,本篇文章主要给大家介绍,如何可以实现Listview控件的效率优化。

1.重用已经生成过的Item View

我们都知道,Listview的数据显示,少不了Adapter的设计,所以优化在重点都在如何设计Adapter中。而BaseAdapter中负责返回布局View的方法,getView(),则是我们优化的重点对象。

在getView()方法中,我们需要将数据与显示布局绑定在一起,每当Listview显示一个Item的时候,就会掉用这个方法产生对应的视图,因此,这个方法会被调用多次。

最简单的我们可以象下面这样:

public View getView(final
int position, View convertView, ViewGroup arg2) {

return convertView = LayoutInflater.from(Context).inflate(R.layout.item,
null);

这种方法最简单,但是效率也最低,因为每次调用都需要给convertView填充布局,因此,我们可以使用下面这种方式

public View getView(final int position, View convertView, ViewGroup arg2) {

if(

convertView==null

){

convertView = LayoutInflater.from(Context).inflate(R.layout.item, null);

}

return

convertView;

}

这样,就只有在contentView为空的时候,才进行布局的填充,从而大大的减少了加载XML布局文件的内存消耗。

2.添加ViewHolder,减少findViewById的次数

一般来说,我们在getView()里面需要进行数据的绑定和事件的绑定,那么我们就需要找到所用的控件,也就是需要findViewById,但是如果在这个方法中,每次都findViewById这个方法,因为findViewById这个方法会在XML文件中进行遍历,从而找到我们需要的控件,因此,会大大的加重手机的负担,那么我们有什么办法减少findViewById的使用次数呢?一个比较好的方法就是创建一个静态类,代码如下

static class ViewHolder {
		TextView tvTitle;
	}

在这个类里面定义好我们需要的控件,然后在getView方法中这样使用

public View getView(final int position, View convertView, ViewGroup arg2) {
		ViewHolder viewHolder = null;
		if (convertView == null) {
			viewHolder = new ViewHolder();
			convertView = LayoutInflater.from(mContext).inflate(R.layout.item, null);
			viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.title);
			convertView.setTag(viewHolder);
		} else {
			viewHolder = (ViewHolder) convertView.getTag();
		}

		viewHolder.tvTitle.setText(list.get(position).getTitle());
		return convertView;
	}

这样,我们就可以大大的提高布局的加载效率了。

3.进行数据的分页显示

现在基本所有的应用都对Listview数据进行了分页的显示,由于系统自带的Listview对数据的分页显示支持的不是很好,所以推荐大家使用XListview等开源项目实现此功能,具体实现的过程就不在本篇文章论述了,如有需要,另开一篇文章介绍数据分页加载的实现。

对Listview控件的效率优化

时间: 2024-08-01 22:46:43

对Listview控件的效率优化的相关文章

Android——ListView控件

本篇介绍ListView控件,这是Android中比较重要也比较复杂的控件,这里只谈到使用ViewHolder机制优化即可. 一.ListView简介 ListView是Android系统中显示列表的控件,每个ListView都可以包含很多个列表项. 二.ListView的使用 概念不多说,直接来介绍使用方法. ListView中比较复杂的是数据适配器,其作用是把复杂的数据(数组.链表.数据库.集合等)填充在指定视图界面,是连接数据源和视图界面的桥梁.常见的Android原生的适配器有Array

VB.NET自动操作其他程序(4)--读取、设置其他软件listview控件的内容

4.3.读取其他软件listview控件的内容 4.3.0.根据窗口句柄,获取进程Id,打开并插入进程,申请代码的内存区,返回申请到的虚拟内存首地址        Dim processId As Integer         '进程pid           hwnd = FindWindow("#32770", "Windows 任务管理器")       '获取任务管理器窗口句柄,注释By Lyh         hwnd = FindWindowEx(hw

C#如何解决对ListView控件更新以及更新时界面闪烁问题

第一个问题:如何更新ListView控件内容 很多时候运行窗体程序时,由于程序中使用了多线程加之操作不当,所以在对控件操作时会出现下面这样的异常: 这是因为我们在窗体中添加的控件都有属于自己的线程,所以不能从其它线程来访问它. 那要如何解决? 使用委托:MethodInvoker,我用这个挺方便的.下面举一个用例: 1 //调用InitListView(),便可以对ListView控件进行自由更新啦 2 private void InitListView() 3 { 4 MethodInvoke

C#在listview控件中显示数据库数据

一.了解listview控件的属性 view:设置为details columns:设置列 items:设置行 1.将listview的view设置为details 2.设置列属性 点击添加,添加一列 设置一列的Text属性,这就是列名 添加三列 3.编辑items属性,添加一行数据 编辑Text属性,添加一行的第一个数据 编辑subitems属性,添加一行中的其他数据 添加两个数据 填写结果 二.在listview中显示数据库数据 //在listview中显示数据库数据 private voi

Windows应用程序高级控件之ListView控件

ListView控件---列表视图控件 用途:显示带图标的项列表,其中可以显示大图标.小图标和数据 ListView控件的常用属性: View属性:设置项在控件中的显示方式,View属性的值有以下几种 Details       每个项显示在不同的行上 LargeIcon     每个项都显示为一个最大的图标,下面有标签,是默认的视图模式 List          每个项显示为一个小图标,右边带标签,各项排列在列中,没有列表头 SmallIcon     每个项显示为小图标,右边带标签 Tit

C#跨进程读取listview控件中的数据

http://www.cnblogs.com/Charltsing/p/slv32.html 欢迎交流:QQ564955427 读取标准的32位listview控件中的数据,网上已经有很多代码了.今天有空也做了个测试.读取TcpEye软件中的数据. 具体见程序附件.  下载(本程序可以自己修改主窗体类名和子窗体类名,抓取其他的软件数据.当然,窗体层次必须是2层,而且不能有多个同类名的子窗体,因为这只是个示例程序) *****************************************

Windows程序==>>使用ListView控件展示数据

使用ListView控件展示数据 01.ImageList控件 1.了解了解         属性 说明 Images 储存在图像列表中的所有图像 ImageSize 图像列表中图像的大小 Transparent 被视为透明的颜色 ColorDepth 获取图像列表的颜色深度 Images中图像的存放方式与存放在数组中一样,通过Count属性可以获得Images中图像的个数.每个图像都有一个索引值,从0开始,使用Images[索引值],可以定位到一个图像. ImageList控件所包含的图像可以

【Visual Basic】vb6的ListView控件,对Access2003数据库的增删改查,判断是否有中文、多窗体操作

vb6对Access2003数据库的增删改查并不复杂,可以通过ado对象轻松完成,下面举个小例子,同时说明vb6中的ListView控件的使用.虽然在<[Visual Basic]列表控件ListView的增删改查.模态对话框.禁止窗口调整大小>曾经对VB.NET的ListView控件进行详细的说明,但是证明微软就是个坑爹货,vb6对于ListView实现的代码居然跟VB.NET有着彻底的不同,似乎换了一门语言似得的.改代码什么的最讨厌的. 首先,在vb6生成的工程文件夹中有着一个db1.md

C# Winform 关于ListView控件绑定DataTable

今天用到ListView控件,这里总结一下ListView控件绑定DataTable的方法 下面需要特别注意的是,绑定的过程中实现绑定控件的column的属性,再进行item的绑定. 与DataGridView不同的是,不能直接使用DataSourse绑定, 再者,绑定第一个Items的时候一定要实例化一个Item进行单独绑定,因为第一个Item与后面的不用即Item与SubItem的区别,下面的代码中也给出了相应的注释 [csharp] view plain copy private void