Android listview ArrayIndexOutOfBoundsException问题

本文介绍如何在Android中使用ListView展示不同类型的条目,并通过重写getItemViewType方法来实现。文章详细解释了类型定义常量的重要性,必须从0开始计数,否则将导致ArrayIndexOutOfBoundsException异常。

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

为了实现listview展示多种类型的条目样式,往往需要重写getItemViewType这个方法,因此我们必须定义类型,比如这样:

private static final int ITEM_TYPE_NORMAL = 1;
private static final int ITEM_TYPE_TITLE_BAR = 2;
private static final int ITEM_TYPE_GROUP_BAR = 3;

这里我们定义了1,2,3三种类型表示不同的view。


然后重载getItemViewType

 	@Override
        public int getItemViewType(int position) {
            if (0 == position || 6 == position) {
                return ITEM_TYPE_GROUP_BAR;
            } else if (1 == position || 7 == position) {
                return ITEM_TYPE_TITLE_BAR;
            } else {
                return ITEM_TYPE_NORMAL;
            }
        }

重载getViewTypeCount,我们定义了3种,返回3

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


然后运行,惊奇地发现程序崩溃了,抛出错误为ArrayIndexOutOfBoundsException,正当你严格查看自己是否是自己哪里做了不正确操作导致数组越界时,你永远是检查不出来的。


经过多方搜索加上看getItemViewType的api,我们得知类型定义常量必须从0开始,而上面定义时从1开始的,导致出现崩溃问题,改成如下方式就对了:

    private static final int ITEM_TYPE_NORMAL = 0;
    private static final int ITEM_TYPE_TITLE_BAR = 1;
    private static final int ITEM_TYPE_GROUP_BAR = 2;

程序运行成功。


sdk文档对getItemViewType的说明是这样子的:



type必须是0到getViewTypeCount() - 1的范围!!!


相关链接:http://stackoverflow.com/questions/2596547/arrayindexoutofboundsexception-with-custom-android-adapter-for-multiple-views-in

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值