我有一个带有onListItemListener的ListView,我有它,所以如果你点击ListView项目它会删除它,但由于某种原因,如果我从列表中删除最后一项,应用程序崩溃并给我这个错误{{1 }}
有谁知道这意味着什么?
这是我的代码:
(java.lang.IndexOutOfBoundsException: Invalid index 3, size is 3)
答案 0 :(得分:4)
我假设您通过pos = 3作为参数值。因为列表的大小是3,所以最后一个元素的位置应该是2.
*编辑:
请记住,listview和适配器的起始索引是不同的。 ListView项pos从“1”开始作为第一个位置,适配器(例如数组)从索引“0”开始作为第一个位置。
adapter.remove(adapter.getItem(pos-1));
答案 1 :(得分:1)
我相信我已经弄明白了,所有答案都说pos
变量是一个数字太高似乎合乎逻辑,但我尝试了所有这些并且它们没有用。
似乎错误的是,当我从列表中删除最后一项时,它会尝试刷新ListView,但它中没有任何内容可以刷新,因此应用程序会崩溃,我改变了我的代码一点点,现在效果很好! :)我不完全理解为什么它有效,但确实如此!
感谢所有答案!
@Override
protected void onListItemClick(ListView l, View v, int pos, long id) {
super.onListItemClick(l, v, pos, id);
if (adapter.getCount() != adapter.getItemId(pos)) {
adapter.remove(adapter.getItem(pos));
adapter.notifyDataSetChanged();
}
}
答案 2 :(得分:0)
根据documentation,您应该使用id作为删除项目的值。
像这样:adapter.remove(adapter.getItem(id));
答案 3 :(得分:0)
尝试以下方法: 如果列表视图中有4个项目,则列表项目位于索引3,第一个项目位于索引0。
@Override
protected void onListItemClick(ListView l, View v, int pos, long id) {
super.onListItemClick(l, v, pos, id);
adapter.remove(adapter.getItem(pos-1));
adapter.notifyDataSetChanged();
}