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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章