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;
}

更新的效率比較:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM