关于ConvertView和viewHolder我个人的理解记录一下方便记忆。 ConvertView : 顾名思义,是一个能够重复使用的View。当用户将手机滑动,处于屏幕最上面的item被移出,此时android回收系统会将这个View保存起来,以便下一个从底部更新出来的item复用,这样就可减少由于每次getView()都要新建View的内存消耗。 ViewHoler: ViewHolder可以看成是一个与ConvertView相互依存的容器,它内部存储了ConvertView所创建的控件,ConvertView通过.setTag()把自身创建的控件存储到ViewHolder中,并与之绑定,后续需要更新ConvertView数据时,可直接通过ViewHolder来进行,从而省去了每次都要findViewById()所消耗的内存。
@Override public View getView(int position, View convertview, ViewGroup arg2) { // TODO Auto-generated method stub ViewHolder holder=null; if(convertview==null){ convertview=inflater.inflate(R.layout.item, null); holder=new ViewHolder(); holder.name=(TextView) convertview.findViewById(R.id.name); holder.des=(TextView) convertview.findViewById(R.id.des); holder.icon=(ImageView) convertview.findViewById(R.id.iv); convertview.setTag(holder); }else{ holder=(ViewHolder) convertview.getTag(); } Log.i("info", "names[position]:"+names[position]); holder.name.setText(names[position]); holder.des.setText(des[position]); holder.icon.setImageResource(icon[position]); return convertview; } private static class ViewHolder{ TextView name ; TextView des; ImageView icon; }