viewholder的使用

viewholder的使用

博客分类:  android 开发
 
Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。 

优化的思路两种: 

1. View的重用 
    View的每次创建是比较耗时的,因此对于getview方法传入的convertView应充分利用 != null的判断 

2.ViewHolder的应用 

View的findViewById()方法也是比较耗时的,因此需要考虑只调用一次,之后就用View.getTag()方法来获得ViewHolder对象。 


下面是优化后的代码供参考: 
Java代码   收藏代码
  1. public class MyAdapter extends BaseAdapter {  
  2.     private Context mContext;  
  3.     private LayoutInflater mInflater;  
  4.   
  5.     public MyAdapter(Context context) {  
  6.         this.mContext = context;  
  7.         mInflater = LayoutInflater.from(mContext);  
  8.     }  
  9.   
  10.     public int getCount() {  
  11.         return mmsList.size();  
  12.     }  
  13.   
  14.     public Object getItem(int arg0) {  
  15.         return arg0;  
  16.     }  
  17.   
  18.     public long getItemId(int arg0) {  
  19.         return arg0;  
  20.     }  
  21.   
  22.     public View getView(int position, View convertView, ViewGroup parent) {  
  23.         ViewHolder holder = null;  
  24.         if (convertView == null) {  
  25.             holder = new ViewHolder();  
  26.             convertView = mInflater.inflate(R.layout.mmslistitem, null);  
  27.             holder.img = (ImageView) convertView.findViewById(R.id.mmsflag);  
  28.             holder.subject = (TextView) convertView  
  29.                     .findViewById(R.id.mmssubject);  
  30.             holder.date = (TextView) convertView.findViewById(R.id.mmsdate);  
  31.             convertView.setTag(holder);  
  32.         } else {  
  33.             holder = (ViewHolder) convertView.getTag();  
  34.         }  
  35.         MMSDBItem mmsItem = mmsList.get(position);  
  36.         holder.subject.setText(mmsItem.getSubject());  
  37.         String today = DateFormat.format("yyyy-MM-dd",  
  38.                 System.currentTimeMillis()).toString();  
  39.         String dateStr = DateFormat.format("yyyy-MM-dd kk:mm",  
  40.                 mmsItem.getDate()).toString();  
  41.         holder.date.setText(dateStr);  
  42.         if (mmsItem.getFlag() == 0) {  
  43.             holder.img.setBackgroundResource(R.drawable.new_message_32);  
  44.         } else {  
  45.             holder.img  
  46.                     .setBackgroundResource(R.drawable.message_already_read_32);  
  47.         }  
  48.         return convertView;  
  49.     }  
  50.   
  51.     public final class ViewHolder {  
  52.         public ImageView img;  
  53.         public TextView subject;  
  54.         public TextView date;  
  55.     }  
  56. }  

你可能感兴趣的:(Android,android)