首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android ListView 多類型 Item 復用機制詳解:getViewTypeCount 與 getItemViewType 實戰

     編輯:程式設計疑難解答

核心方法

public class MyAdapter extends BaseAdapter {
    private static final int TYPE_TEXT = 0;
    private static final int TYPE_IMAGE = 1;
    private static final int TYPE_VIDEO = 2;

    @Override public int getViewTypeCount() { return 3; }

    @Override public int getItemViewType(int position) {
        Item item = getItem(position);
        if (item.isText()) return TYPE_TEXT;
        if (item.isImage()) return TYPE_IMAGE;
        return TYPE_VIDEO;
    }

    @Override public View getView(int position, View convertView, ViewGroup parent) {
        int type = getItemViewType(position);
        ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            switch (type) {
                case TYPE_TEXT: convertView = inflate(R.layout.item_text); break;
                case TYPE_IMAGE: convertView = inflate(R.layout.item_image); break;
                case TYPE_VIDEO: convertView = inflate(R.layout.item_video); break;
            }
            holder.bind(convertView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
            // 可選:若 convertView 類型不匹配(極少見),重新 inflate
        }
        holder.fillData(getItem(position));
        return convertView;
    }
}

關鍵點

  • getViewTypeCount 返回類型總數,系統為每類型維護獨立回收池。
  • getItemViewType 必須穩定:同一 position 永遠返回相同類型。
  • 使用 ViewHolder 緩存 findViewById 結果,提升滑動流暢度。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved