Android listview 的优化
接[Android listview的应用][1]
在我们上一篇[Android listview的应用][1]中,我们的adapter中的getView()方法中每次都将布局重新加载一遍,这样就会导致我们的listview的运行效率很低.
[1]:http://www.cnblogs.com/stareblankly/p/5057340.html
如果我们称上一篇是逗比式,那么接下来就是普通式.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Fruit fruit=getItem(position);
View view;
if (convertView==null) {
view=LayoutInflater.from(getContext()).inflate(resourceid, null);
}else {
view=convertView;
}
TextView tv=(TextView) view.findViewById(R.id.fruit_name);
ImageView iv=(ImageView) view.findViewById(R.id.furit_image);
iv.setImageResource(fruit.getImageId());
tv.setText(fruit.getName());
return view;
}
可以看到,在代码中我们对convertView进行了判断,只有当convertView为空的时候,我们才去加载布局,不过不为空则直接对convertView进行重用,这样就大大的提高了ListView的运行效率.不过其实我们这部分代码其实还是可以继续进行优化的,接下来就是ListView的文艺式.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Fruit fruit=getItem(position);
View view;
ViewHolder viewHolder;
if (convertView==null) {
view=LayoutInflater.from(getContext()).inflate(resourceid, null);
viewHolder=new ViewHolder();
viewHolder.iv=(ImageView) view.findViewById(R.id.furit_image);
viewHolder.tv=(TextView) view.findViewById(R.id.fruit_name);
view.setTag(viewHolder); //将ViewHolder存储在view中
}else {
view=convertView;
viewHolder=(ViewHolder) view.getTag(); //重新获取viewHolder
}
viewHolder.iv.setImageResource(fruit.getImageId());
viewHolder.tv.setText(fruit.getName());
return view;
}
class ViewHolder{
ImageView iv;
TextView tv;
}
在这里我们定义了一个内部类ViewHolder用来存放控件,然后把ViewHolder存储在view中,这样每次加载的时候就不用重新根据ID来获取控件来,这样我们listview运行的效率又快乐很多.
Android listview 的优化的更多相关文章
- Android ListView性能优化实例讲解
前言: 对于ListView,大家绝对都不会陌生,只要是做过Android开发的人,哪有不用ListView的呢? 只要是用过ListView的人,哪有不关心对它性能优化的呢? 关于如何对ListVi ...
- Android Listview 性能优化
首先我一般使用的适配器是BaseAdapter,其中有两个方法最主要,分别是: getCount,getView, 在对Listview 进行优化的时候,首先使用 convertview 和viewH ...
- Android ListView 全面优化
结合昨天学习的多线程,今天又继续对ListView进行了优化,包括异步加载图片,滑动时暂停加载,滑动停止后再加载显示界面中的item. 综合ListView在使用时参考的多篇博客,这里对ListVie ...
- (翻译) Android ListView 性能优化指南
本文翻译了Lucas Rocha的Performance Tips for Android’s ListView.这是一篇关于介绍如何提升ListView性能的文章,非常的优秀.使得我拜读之后,忍不住 ...
- Android ListView的优化
最近的项目中有通讯录这个模块,里面的通讯录涉及的联系人数量很大,导致在加载页面的时候有点卡,所以就必须得进行优化,优化的最终实现理论是什么?就是让ListView一次性加载的数据较少,后续根据用户操作 ...
- android: ListView历次优化
第一版: ListView一屏显示多少对象其内部就创建多少View对象.滑动时退出的缓存对象留给滑进去时调用getView传的convertView.因为如果每次都findViewById查找创建视图 ...
- android ListView优化
android ListView通过优化重用历史缓存实现.listview相应的数据适配器一般使用自己定义BaseAdapter子类,重用历史缓冲区来提高性能. 例如,下面的示例代码演示: 1.lis ...
- Android之ListView性能优化——一行代码绑定数据——万能适配器
如下图,加入现在有一个这样的需求图,你会怎么做?作为一个初学者,之前我都是直接用SimpleAdapter结合一个Item的布局来实现的,感觉这样实现起来很方便(基本上一行代码就可以实现),而且也没有 ...
- android ListView的介绍和优化
xml设计 <?xml version="1.0"?> -<RelativeLayout tools:context=".MainActivity&qu ...
随机推荐
- C++语法报错收集
1. error C2864: "OuterClass::m_outerInt": 只有静态常量整型数据成员才可以在类中初始化 class OuterClass { public: ...
- ETL概述
转自:http://blog.csdn.net/leosoft/article/details/4279536 ETL,Extraction-Transformation-Loading的缩写,中文名 ...
- mac Word 怎样放大缩小文档结构图文字大小
在文档结构图的侧栏里按住control+option,然后滑动鼠标滚轮/双指上下滚动触摸板.
- 使用jekyll主题
github上面有很多基于jekyll的主题 https://github.com/theme4jekyll 使用起来也非常方便.直接clone到本地 这些主题,包括了很多模板,在新建博客的时候可以在 ...
- 【1】python核心编程 第三章
1.继续( \ ) 有两种例外情况一个语句不使用反斜线也可以跨行.在使用闭合操作符时,单一语句可以跨多行,例如:在含有小括号.中括号.花括号时可以多行书写.另外就是三引号包括下的字符串也可以跨行书写 ...
- mysql 执行reset master 风险
reset master 会把mysql实例上的所以二进制日志删除,并且日志序列从1开始:这样会引起两个问题. 001.问题一 slave 由于找不到下一个要执行的事件所以会报错.进一步master- ...
- Delphi泛型评测(30篇)
http://www.cnblogs.com/jxgxy/category/216671.html
- Shell变量替换,命令替换,转义字符
如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. 举个例子: #!/bin/bash a=10 echo -e "Value ...
- 转:基础总结篇之一:Activity生命周期
熟悉javaEE的朋友们都了解servlet技术,我们想要实现一个自己的servlet,需要继承相应的基类,重写它的方法,这些方法会在合适的时间被servlet容器调用.其实android中的Acti ...
- LintCode-A + B 用位操作模拟加法
class Solution { public: /* * @param a: The first integer * @param b: The second integer * @return: ...