Adaptert Listview 优化

  这次是关于Listview的优化的,之前一直采用愚蠢的方式来使用listview,出现的情况就是数据多的话下拉的时候会出现卡顿的情况,内存占用多。所以学习了关于listview的优化,并且这也是普遍使用的方法。我们一般来说创建listview的话更常用的是继承BaseAdapter的方式进行实现,因为这样可以自定义list没一个item的布局,根据程序的需求进行定制,一般来说listview所展示的数据都是比较多的,一般也有比较少的。所以,不对adapter进行优化的话,那么每一次拖动listview都需要生成一次布局,这样的话,程序就可能会有卡顿的情况,并且这样的方式占用内存也比较多。主要是 getView(final int position, View convertView, ViewGroup parent){}的区别

  下面这种方式不推荐使用:

public View getView(final int position, View convertView, ViewGroup parent) {
    convertView= inflater.inflate(R.layout.activity_layout, null);
    TextView testName = (TextView) convertView
					    .findViewById(R.id.testName_textview);
    TextView CassetteType = (TextView) convertView
					    .findViewById(R.id.CassetteType_textview);
    TextView testTimeYear_textview = (TextView) convertView
					    .findViewById(R.id.testTimeYear_textview);
    testName.setText("Hello");
    CassetteType.setText("Android");
    testTimeYear_textview.setText("Word");
return view;
}

  比较简单的例子,上面的方式不推荐使用,因为每一次加载item的时候都需要重新加载每一个控件,使得程序占用内存大,还可能会卡卡的感觉。

  推荐下面的方式使用:

public View getView(final int position, View convertView,ViewGroup parent) {
    ViewHolder viewHolder = null;
    if (null == convertView) {
        viewHolder = new ViewHolder();
        LayoutInflater mInflater = LayoutInflater.from(mContext);
        convertView = mInflater.inflate(R.layout.data_management, null);
        viewHolder.CassetteType = (TextView) convertView
                        .findViewById(R.id.CassetteType_textview);
        viewHolder.testTimeYear_textview = (TextView) convertView
                        .findViewById(R.id.testTimeYear_textview);
        viewHolder.testTime = (TextView) convertView
                        .findViewById(R.id.testTime_textview);     convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }
    testName.setText("Hello");
    CassetteType.setText("Android");
    testTimeYear_textview.setText("Word");
return convertView;
        }
    private static class ViewHolder {
        TextView CassetteType;
        TextView testTimeYear_textview;
        TextView testTime;

    }

  这种方法的特点便是通过类ViewHolder,进行TextView的定义,Adapter每一次创建一个item的时候先判断convertView是否为空,为空的话就进行findViewById,其中最重要的是这个convertView.setTag(viewHolder);,convertView不为空的话就执行这句viewHolder = (ViewHolder) convertView.getTag();,然后每一个item就不需要重复性的去findViewById布局的每一个view了,这样就能优化listview的加载速度和减少内存使用,原理大概便是这样,可能也没有讲明,没能理解的话,建议搜搜listview优化。

时间: 2024-09-30 23:58:26

Adaptert Listview 优化的相关文章

10熟练掌握listview优化

熟练掌握listview优化,获取网络图片异步加载,分批加载,分页显示,图片缓存等优化方式 ListView的工作原理 首先来了解一下ListView的工作原理(可参见http://mobile.51cto.com/abased-410889.htm),如图: ListView 针对每个item,要求 adapter "返回一个视图" (getView),也就是说ListView在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得到ListView的长度,然后根据这

ListView优化-ViewHolder缓存

安卓开发中ListView控件是一个使用频率相当的高级控件,通常用于展示一系列相似度极高的数据,当数据量极大或布局相当复杂时,ListView的性能优化就显得非常重要.所以在开发中不但功能上要满足,而且在性能上也不能马虎.        使用ListView是一个标准的适配器设计模式,ListView把数据.XML布局和Adapter有极地结合在一起完成一系列的展示功能.在ListView的数据展示中,每次滑动ListView都会触发getView()方法的调用,并且XML定义的布局是在也是在适

Android 常驻与很驻型广播的差别,及ListView优化,Android新手基本知识巩固

1.常驻型广播 常驻型广播,当你的应用程序关闭了,假设有广播信息来,你写的广播接收器相同的能接受到. 他的注冊方式就是在你的应用程序中的AndroidManifast.xml进行注冊. 通常说这样的方式是静态注冊 以下是配置样例 2<receiver android:name=".widget.DeskWidgeWeather"> 3<meta-data android:name="android.appwidget.provider" andro

Android MaoZhuaWeiBo Adapter ListView优化及发送微博 - 4

这一篇主要给大家说说Adapter ListView优化及发送微博,我们都知道Android在一些比较耗内存的类里,为了尽量避免浪费内 存,我们需要对我们的组件之类的进行优化,使其节约不必要的资源浪费 自定义适配器: package com.neweriweibo.adapter; /** * 适配器 * @author Engineer-Jsp * @date 2014.10.28 * */ import java.util.ArrayList; import com.neweriweibo.

listView优化以及内存泄露问题

最经开发app使出现了由于ListView产生的内存泄露问题.我们知道内存泄露时很不好的.意味着,代码写的有点失败,需要做些优化改动. 经过这次的教训,以及在网上找了些资料,总结了一下,关于ListView的优化: listview优化问题: 首先,listview必须严格按照convertView及viewHolder格式书写,这样可以基本保证数据最优. 其次,如果自定义Item中有涉及到图片等等的,一定要做图片优化.bitmap释放可以不做. 第三,尽量避免在BaseAdapter中使用st

listview优化2

ListView优化2: 如果一个listView不做任何的优化,而且有很多的条目,当我们快速的拖动listView的界面的时候,就不断的GCGC(Garbage Collection )垃圾回收,当GC到某个时候就会(OOM)outofmemory内存溢出,应用程序也就会随之挂掉,产生这个问题的原因是什么呢?我们知道listView的特点是每产生一个条目就会调用一次getView方法,如果我们不进行优化,每一次调用都要执行getView方法中的所有语句,而且会在最上面的条目移出界面的时候回收掉

内存泄露--contentView缓存使用与ListView优化

引起Android内存泄露有很多种原因,下面罗列了一些问题,以后会一一解决 1.构造Adapter时没有使用缓存convertView(衍生出ListView优化问题) 2.查询数据库游标没有关闭 3.Activity中生命周期对象大于Activity生命周期(关于Application Context与Activity Context) 4.Bitmap对象不使用时没有recycle掉(这里还有其他解决方案) 今天说的是第一种:如何使用缓存来优化ListView 因为如果不使用缓存conver

ListView优化的代码

第三种ListView优化:通过convertView+ViewHolder来实现,ViewHolder就是一个静态类,使用 ViewHolder 的关键好处是缓存了显示数据的视图(View),加快了 UI 的响应速度. 当我们判断 convertView == null  的时候,如果为空,就会根据设计好的List的Item布局(XML),来为convertView赋值,并生成一个viewHolder来绑定converView里面的各个View控件(XML布局里面的那些控件).再用conver

Android 常驻与非常驻型广播的区别,及ListView优化,Android新手基本知识巩固

1.常驻型广播 常驻型广播,当你的应用程序关闭了,如果有广播信息来,你写的广播接收器同样的能接受到, 他的注册方式就是在你的应用程序中的AndroidManifast.xml进行注册.通常说这种方式是静态注册 下面是配置例子 2<receiver android:name=".widget.DeskWidgeWeather"> 3<meta-data android:name="android.appwidget.provider" android