Listview添加完HeaderView或者FooterView后,点击相应的view出现IndexOutOfBoundsException问题修复

在ListView添加FooterView后点击导致IndexOutOfBoundsException。解决方案包括:1) 改变onItemClick中获取Item的方式,使用parent.getAdapter().getItem(position);2) 添加判断条件避免超出列表范围;3) 在自定义Adapter的getItem方法中处理超出范围的情况。问题根源在于添加FooterView后,ListView的Adapter计数包含了Header/Footer,导致原getItem方法访问非法位置。
摘要由CSDN通过智能技术生成
问题描述

开发过程在使用ListView时发现了这个问题,在给ListView添加了HeaderView或则FooterView(下面全部以FooterView举例子,它们两者的原理是相同的)之后,再去点击FooterView时候会出现crash,IDE给出的错误报告是,在ListView的onItemClick中出现IndexOutOfBoundsException这个异常。
ps:这时候通常我们为该ListView定制了自定义的Adapter,并且复写了其中的getItem方法,一般如下所示:

@Override
    public Object getItem(int position) {
        return datas == null ? null : datas.get(position);
    }
解决方案

通过在网上搜索后看到有两种解决方案:
方法1、改变在onItemClick中获得Item的方式:通常我们是通过yourAdapter.getItem(position)来获得相应位置上的item,其中这个yourAdapter是你自己为ListView定制的Adapter;ok,然后需要改成使用parent.getAdapter().getItem(position)来获得当前点击的item,这样就可以解决上述出现的问题(亲测可用);
方法2、还是在onItemClick中进行,在其中加上if((position - 1) != mListItems.size()){….do something} 这个条件。具体见http://blog.csdn.net/lambert519/article/details/49233789
这个我木有去测试;

为什么能解决

貌似网上很少有小伙伴讲为什么能解决。所以这里说一下方法1能解决这个问题的原因吧。从IDE报出的错误就可以看出,ListView的size和访问的position中出现的问题;还可以确定的是这个问题是由于对ListView使用了addFooterView()方法造成的,那么我们来看一下究竟里面做了些什么,ok源码:

public void 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值