(一)概述
(二)复用ConvertView
NO.1 ——ConvertView是什么?
ConvertView是系统提供给我们的可供复用的View的缓存对象,那么,我们每次Inflate()xml文件的时候是不是先查看下ConvertView缓存对象中是否已经有了这个需要加载的对象,若没有我就加载,如果有,我是不是可以直接从ConvertView缓存对象拿出来使用了!这就大大提升了性能,其次,我们每次加载ListView中的Item对象时,都需要执行一遍getView()方法,而每执行一遍我都需要加载一次item的xml文件,这就导致了性能的下降,若给ConvertView缓存对象加一个判断对象的话,执行效率就会大大提高,那就优化吧,优化后的代码如下:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//加入了if判断语句,convertView 缓存对象是否存在,若不存在则加载,相反,则不加载;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.list_heros, parent,false);
}
ImageView img_iconView = (ImageView) convertView.findViewById(R.id.heros_imgs);
TextView tvNames = (TextView) convertView.findViewById(R.id.names);
TextView tvSpakes = (TextView) convertView.findViewById(R.id.spake);
img_iconView.setBackgroundResource(mHeros.get(position).gethIcon());
tvNames.setText(mHeros.get(position).gethName());
tvSpakes.setText(mHeros.get(position).gethSpake());
return convertView;
}
(三)ViewHolder模式
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//加入了if判断语句,convertView 缓存对象是否存在,若不存在则加载,相反,则不加载;
//使用ViewHolder解决执行方法时多次调用findViewById()方法;
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.list_heros, parent,false);
holder = new ViewHolder();
holder.img_iconView = (ImageView) convertView.findViewById(R.id.heros_imgs);
holder.tvNames = (TextView) convertView.findViewById(R.id.names);
holder.tvSpakes = (TextView) convertView.findViewById(R.id.spake);
convertView.setTag(holder); //将holder存储到convertView中
}else {
holder = (ViewHolder) convertView.getTag();
}
holder.img_iconView.setBackgroundResource(mHeros.get(position).gethIcon());
holder.tvNames.setText(mHeros.get(position).gethName());
holder.tvSpakes.setText(mHeros.get(position).gethSpake());
return convertView;
}
static class ViewHolder{
ImageView img_iconView;
TextView tvNames;
TextView tvSpakes;
}
}
那酸爽怎是无与伦比呀~如果你觉得对你有帮助就帮我点个赞吧~~<完>