ListView使用ViewHolder模式提高效率

来源:互联网 发布:淘宝的消费总额怎么看 编辑:程序博客网 时间:2024/06/07 21:37

Listview的基本用法基本都熟练掌握,其中ViewHolder模式是提高Listview效率的一个很重要的方法。ViewHolder模式充分利用ListView的视图缓存机制,避免每次调用getView()的时候都去通过findViewById()实例化控件。据推测,使用View将提高50%以上的效率。

使用手续在自定义Adapter中定义一个内部类ViewHolder,并将布局中的控件作为成员变量,代码如下所示:

 public final class ViewHolder {        public ImageView img;        public TextView title;    }
接下来,只有在getView()方法中通过视图缓存机制来重用以缓存即可,完整的使用ViewHolder创建LisetView Adapter的实例代码如下所示。
package com.imooc.myapplication;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import java.util.List;public class NotifyAdapter extends BaseAdapter {    private List<String> mData;    private LayoutInflater mInflater;    public NotifyAdapter(Context context, List<String> data) {        this.mData = data;        mInflater = LayoutInflater.from(context);    }    @Override    public int getCount() {        return mData.size();    }    @Override    public Object getItem(int position) {        return mData.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder holder = null;        // 判断是否缓存        if (convertView == null) {            holder = new ViewHolder();            // 通过LayoutInflater实例化布局            convertView = mInflater.inflate(R.layout.notify_item, null);            holder.img = (ImageView) convertView.findViewById(R.id.imageView);            holder.title = (TextView) convertView.findViewById(R.id.textView);            convertView.setTag(holder);        } else {            // 通过tag找到缓存的布局            holder = (ViewHolder) convertView.getTag();        }        // 设置布局中控件要显示的视图        holder.img.setBackgroundResource(R.drawable.ic_launcher);        holder.title.setText(mData.get(position));        return convertView;    }    public final class ViewHolder {        public ImageView img;        public TextView title;    }}
效果很简单,这就是一个简单的Listview


源码下载:http://download.csdn.net/detail/qq_31307919/9483454

1 0
原创粉丝点击