给学生讲课的时候,发现存在这个问题,下来百度了下,发现很纠结,涉及到了内部类对外部类的引用,静态类的生命周期等java知识,现总结如下: static class ViewHolder { //定义listView item中相应的控件 } 这里的ViewHolder类需不需要定义成static,根据实际情况而定,如果item不是很多的话,可以使用,这样在初始化的时候,只加载一次,可以稍微得到一些优化: 不过,如果item过多的话,建议不要使用.因为static是Java中的一个关键字,当用它来…
1.android:layout_height属性: 必须将ListView的布局高度属性设置为非“wrap_content”(可以是“match_parent /  fill_parent  /  400dp等绝对数值”),如果ListView的布局高度为“wrap_content”,那么getView()就会重复调用.一般来说,一个item会被调用三次左右. 2.ViewHolder: 利用ViewHolder内部类,将item布局文件中需要展示的控件定义为属性(其实ViewHolder就是…
ViewHolder.java package cn.edu.bzu.util; import android.content.Context; import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; /** * Created by monster on 2015/4/20. * Have a goo…
如果有人还不了解ViewHolder为什么可以起到优化作用,我这边再做下简单说明:Android的findViewById动作是比较耗时的,需要遍历布局的树形结构,才能找到相应的视图.所以如果想在这一块进行优化,我们就需要把find过后的内容进行缓存,所以就用ViewHolder的方法. 这个方法很容易理解,但是可能有些人还是比较较真,就像我,这样可以起到缓存作用,那为什么内部类非得要声明成static的呢,普通的内部类不是也起到这样的效果吗?这个疑问也困扰了我很久.直到我看了<Effectiv…
如果有人还不了解ViewHolder为什么可以起到优化作用,我这边再做下简单说明:Android的findViewById动作是比较耗时的,需要遍历布局的树形结构,才能找到相应的视图.所以如果想在这一块进行优化,我们就需要把find过后的内容进行缓存,所以就用ViewHolder的方法. 这个方法很容易理解,但是可能有些人还是比较较真,就像我,这样可以起到缓存作用,那为什么内部类非得要声明成static的呢,普通的内部类不是也起到这样的效果吗?这个疑问也困扰了我很久.直到我看了<Effectiv…
在Android开发中难免会遇到大量的数据加载到ListView中进行显示, 然后其中最重要的数据传递桥梁Adapter适配器是常用的,随着市场的需 求变化ListView'条目中的内容是越来越多这就需要程序员来自定义适配器, 而关键的就是适配器的优化问题,适配器没有优化好往往就会造成OOM (内存溢出)或者是滑动卡顿之类的问题,接下来我就给大家介绍一种常 用的Adapter优化方法 /** * list View的适配器 */ class Adapter extends BaseAdapter…
ListView的工作原理 首先来了解一下ListView的工作原理(可参见http://mobile.51cto.com/abased-410889.htm),如图: ListView 针对每个item,要求 adapter “返回一个视图” (getView),也就是说ListView在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得到ListView的长度,然后根据这个长度,调用getView()一行一行的绘制ListView的每一项.如果你的getCount()返回…
1,listview加载性能优化ViewHolder 转自: http://blog.csdn.net/jacman/article/details/7087995 在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候,会占据大量内存,影响性能,这时候就需要按需填充并重新使用view来减少对象的创建. ListView加载数据都是在public Vie…
引起Android内存泄露有很多种原因,下面罗列了一些问题,以后会一一解决 1.构造Adapter时没有使用缓存convertView(衍生出ListView优化问题) 2.查询数据库游标没有关闭 3.Activity中生命周期对象大于Activity生命周期(关于Application Context与Activity Context) 4.Bitmap对象不使用时没有recycle掉(这里还有其他解决方案) 今天说的是第一种:如何使用缓存来优化ListView 因为如果不使用缓存conver…
1.ListView基本概念 列表显示需要三个元素: ListView:用来展示列表的View. 适配器:用来把数据映射到ListView上 数据:具体的将被映射的字符串,图片或基本组件 适配器类型分为三种:ArrayAdapter,SimpleAdapter和SimpleCursorAdapter. 1.1.ArrayAdapter ArrayAdapter是BaseAdapter的派生类,在BaseAdapter的基础上,添加了一项重大的功能:可以直接使用泛型构造. ArrayAdapter…