简化代码示例如下所示.对于position元素,ArrayAdapter的getItem *** 作如何失败? ArrayAdapter永远不会更改,Activity中没有其他方法.
我知道indexoutofboundsexception是什么,我知道我可以通过先检查长度来阻止它.但我很好奇:这个例外怎么会发生在这里?如何点击数据结构中不存在的事件?
减少代码:
public class EventListActivity extends Activity { public voID onStart() { final ListVIEw ListvIEw = new ListVIEw(this); final Event[] events = [RetrIEve a Array from somewhere] final ArrayAdapter<Event> a = new ArrayAdapter<Event>(this,R.layout.eventListitem,events); ListvIEw.setAdapter(a); ListvIEw.setonItemClickListener(new OnItemClickListener() { public voID onItemClick(AdapterVIEw<?> parent,VIEw vIEw,int position,long ID) { Event event = a.getItem(position); ^^^^^^^ throws Exception } });
例外:
java.lang.indexoutofboundsexceptionat java.util.Arrays$ArrayList.get(Arrays.java:75)at androID.Widget.ArrayAdapter.getItem(ArrayAdapter.java:298)at xxx.EventListActivity.onItemClick(EventListActivity.java:130)解决方法 好的,我调试了它,万一有人有同样的错误,这里是解决方案:
如果使用ListVIEw.addheader,则onItemClick的position参数将移位1.看起来很奇怪,因为该位置与数组适配器中的位置无关. This SO Question包含相同的结论,您必须注意添加为标题的内容.
我上面的问题实际上并不是很有帮助,因为整个addheader部分都丢失了,不可能回答其他人的问题,抱歉.然而,这个答案可能对其他人有所帮助.
总结以上是内存溢出为你收集整理的android – ArrayAdapter中的IndexOutOfBoundsException全部内容,希望文章能够帮你解决android – ArrayAdapter中的IndexOutOfBoundsException所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)