点击listview item 报 java.lang.IndexOutOfBoundsException 问题解决方案分析

点击listview item 报 java.lang.IndexOutOfBoundsException 问题解决方案分析

1. 点击listview item时会遇到 java.lang.IndexOutOfBoundsException: Invalid index 6, size is 6 问题。

出现原因 有可能是 adapter 中list的数据集合长度已经发生变化,但是没有notifydatasetchange(),呈现在listview中数据还是list集合改变之前。

在点击item时,触发 onitemclick事件:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Goods goods = goodsList.get(position);

}
}

这种写法,有可能会引发 java.lang.IndexOutOfBoundsException;但是也有可能会导致item呈现的内容,和点击item后的详情中呈现的内容不一致。


针对以上问题的解决方法


1).在工程values文件夹下定义ids.xml文件

<resources>

<item type="id" name="tag_first"></item>
<item type="id" name="tag_second"></item>
</resources>

2)adapter中 给 convertView 绑定数据

convertView.setTag(R.id.tag_first,holder);//绑定holder 缓存的复用

convertView.setTag(R.id.tag_second, goods);//绑定数据

3)在onitemclick事件中通过getTag()方法得到要点击的数据:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Goods goods = (Goods) view.getTag(R.id.tag_second); //得到每个item绑定的数据

}
}

通过以上的修改,就不会出现 数组越界的问题,也不会出现数据错乱的问题了。

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部