ListView展示不同類別

需求

同一個ListView展示多種不同UI風格類型的Item

代碼實現

    關鍵是重寫 getViewTypeCount() 和 getItemViewType(int position) 兩個方法。
    private static final int TYPE1 = 0;
    public static final int TYPE2 = 1;

    @Override
    public int getViewTypeCount() {
        // 類型數量
        return 2;
    }

    @Override
    public int getItemViewType(int position) {
        // 判斷返回不同的type類型
        if (false) {
            return TYPE1;
        } else {
            return TYPE2;
        }
    }
在getView()中進行判定,加載不同的佈局類型
if (TYPE1 == getItemViewType(position)) {
      ViewHolder1 holder = null;
      if (convertView == null) {
          convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item1, parent, false);
          holder = new ViewHolder1(convertView);
          convertView.setTag(holder);
      } else {
          holder = (TitileViewHolder) convertView.getTag();
      }
      // 處理item1
} else if (TYPE2 == getItemViewType(position)) {
      ViewHolder2 holder = null;
      if (convertView == null) {
          convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item2, parent, false);
          holder = new ViewHolder2(convertView);
          convertView.setTag(holder);
      } else {
          holder = (ViewHolder) convertView.getTag();
      }
      // 處理item2
}
return convertView;

注意:
1.類型的TYPE1、TYPE2必須從0到getViewTypeCount() - 1,否則報錯索引越界 ArrayIndexOutOfBoundsException
2.getItemViewType(int position)方法可以返回 IGNORE_ITEM_VIEW_TYPE,常量等於 -1。此類型表示Item的convertView不會被重用,每次都通過佈局創建。

發佈了82 篇原創文章 · 獲贊 69 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章