问题描述
开发过程在使用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