今天几下的是BaseAdapter的优化这个问题
在曾经的开发中遇到了大大小小的listview问题
感觉这个优化还是很实际也很实用,废话不多说!!!
一、ConvertView得复用
@Override public View getView(int position, View convertView, ViewGroup parent) { convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list_animal,parent,false); ImageView img_icon = (ImageView) convertView.findViewById(R.id.img_icon); TextView txt_aName = (TextView) convertView.findViewById(R.id.txt_aName); TextView txt_aSpeak = (TextView) convertView.findViewById(R.id.txt_aSpeak); img_icon.setBackgroundResource(mData.get(position).getaIcon()); txt_aName.setText(mData.get(position).getaName()); txt_aSpeak.setText(mData.get(position).getaSpeak()); return convertView; }是不是很熟悉,getView我们是经常用到了,那大家仔细看一下,是不是
界面有多少个item我们就得去get多少次,这是肯定
那每次我们都要去inflate()一次,累不累啊,你不累,系统累了
inflate()每次都要加载一次xml,其实这个convertView是系统提供给我们科用的View的缓存对象
那怎么优化呢?
可以在定义convertView的时候加上这样:
if(convertView == null){ convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list_animal,parent,false); }这样这个问题就解决了。
二、ViewHolder重用组件
上面说了,getView()每次都会被调用,那是自然,那调用那么多次,其实还有一个也一直被调用,那就是findViewById了
那其实也是可以进行优化的,那就是今天的主角:ViewHolder,本屌曾深深爱上它。。。
怎么用,来,这里:
@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if(convertView == null){ convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list_animal,parent,false); holder = new ViewHolder(); holder.img_icon = (ImageView) convertView.findViewById(R.id.img_icon); holder.txt_aName = (TextView) convertView.findViewById(R.id.txt_aName); holder.txt_aSpeak = (TextView) convertView.findViewById(R.id.txt_aSpeak); convertView.setTag(holder); //将Holder存储到convertView中 }else{ holder = (ViewHolder) convertView.getTag(); } holder.img_icon.setBackgroundResource(mData.get(position).getaIcon()); holder.txt_aName.setText(mData.get(position).getaName()); holder.txt_aSpeak.setText(mData.get(position).getaSpeak()); return convertView; } static class ViewHolder{ ImageView img_icon; TextView txt_aName; TextView txt_aSpeak; }是不是很简单,这就是个绝对的模板,按这个来就对了,static加不加看个人情况啊,可以方便之后被其他调用,
当然如果只有一个调用的话那也可加可不加哈。
感谢 : http://www.runoob.com/w3cnote/android-tutorial-baseadapter.html 的资料