码迷,mamicode.com
首页 > 其他好文 > 详细

Adaptert Listview 优化

时间:2015-03-12 22:25:05      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

  这次是关于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优化。

Adaptert Listview 优化

标签:

原文地址:http://www.cnblogs.com/caoRM/p/4333042.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!