Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android開發之ListView適配器優化

Android開發之ListView適配器優化

編輯:Android開發實例

  ListView的Adapter的作用如下圖所示:

  Adapter的作用就是ListView界面與數據之間的橋梁,當列表裡的每一項顯示到頁面時,都會調用Adapter的getView方法返回一個View。想過沒有? 在我們的列表有1000000項時會是什麼樣的?是不是會占用極大的系統資源?

  先看看下面的代碼:

  public View getView(int position, View convertView, ViewGroup parent) {
    View item = mInflater.inflate(R.layout.list_item_icon_text, null);
    ((TextView) item.findViewById(R.id.text)).setText(DATA[position]);
    ((ImageView) item.findViewById(R.id.icon)).setImageBitmap(
    (position & 1) == 1 ? mIcon1 : mIcon2);
    return item;
  }

  我們再來看看下面的代碼:

  public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
    convertView = mInflater.inflate(R.layout.item, null);
  }
    ((TextView) convertView.findViewById(R.id.text)).setText(DATA[position]);
    ((ImageView) convertView.findViewById(R.id.icon)).setImageBitmap(
    (position & 1) == 1 ? mIcon1 : mIcon2);
    return convertView;
  }

  上面的代碼好了很多,系統將會減少創建很多View。性能得到了很大的提升。

  下面是更優化的代碼:

  public View getView(int position, View convertView, ViewGroup parent) {
  ViewHolder holder;
  if (convertView == null) {
  convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
  holder = new ViewHolder();
  holder.text = (TextView) convertView.findViewById(R.id.text);
  holder.icon = (ImageView) convertView.findViewById(R.id.icon);
  convertView.setTag(holder);
  } else {
  holder = (ViewHolder) convertView.getTag();
  }
  holder.text.setText(DATA[position]);
  holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);
  return convertView;
  }
 
  static class ViewHolder {
  TextView text;
  ImageView icon;
  }

  三種方法的對比圖:哪個最提升性能一眼就看出來了

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved