ListView展示不同类别

本文介绍如何在ListView中实现不同类型Item的展示,重点讲解重写getViewTypeCount()和getItemViewType()方法的方法,并提供示例代码,帮助读者理解ListView中不同样式Item的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求

同一个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不会被重用,每次都通过布局创建。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值