Android--ListView 更高效的使用 Adapter

Android--ListView 更高效的使用 Adapter

一、Adapter

Adapter是ListView和數據源之間的中間人。

當每條數據進入可見區時,adapter會調用他的getView()方法,並返回代表具體數據的視圖。滾動的時候頻繁調用,支持成千上萬的數據。

①、最簡單的方法,最慢最不實用

public void getView(int position , View convertView , ViewGroup parent){
        View item = mInflater.inflate(R.layout.list_view, null);
        (TextView)item.findViewById(R.id.text).setText(DATA[position]);
        (ImageView)item.findViewById(R.id.img).setImageBitmap(icon);
        return item;
    }

②、利用convertView回收視圖,效率提高200%

複製代碼
public void getView(int position , View convertView , ViewGroup parent){
        if(convertView == null){
            convertView = mInflater.inflate(R.layout.list_view, null);
        }
      (TextView)convertView.findViewById(R.id.text).setText(DATA[position]);
      (ImageView)convertView.findViewById(R.id.img).setImageBitmap(icon);
         return convertView;
    }  
複製代碼

③、使用ViewHolder模式,效率再提高50%

複製代碼
static class ViewHolder{
        private TextView tv;
        private ImageView iv;
    }
    
    public void getView(int position , View convertView , ViewGroup parent){
        ViewHolder holder;
        if(convertView == null){
            convertView = mInflater.inflate(R.layout.list_view, null);
            holder = new ViewHolder();
            holder.tv = (TextView)convertView.findViewById(R.id.text);
            holder.iv = (ImageView)convertView.findViewById(R.id.img);
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
        }
        holder.tv.setText(DATA[position]);
        holder.iv.setImageBitmap(icon);
        return convertView;
    }
複製代碼

更新的效率比較:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章