从Android中的ListView中删除最后一项时出错

时间:2013-02-26 02:56:15

标签: java android onclicklistener

我有一个带有onListItemListener的ListView,我有它,所以如果你点击ListView项目它会删除它,但由于某种原因,如果我从列表中删除最后一项,应用程序崩溃并给我这个错误{{1 }}

有谁知道这意味着什么?

这是我的代码:

(java.lang.IndexOutOfBoundsException: Invalid index 3, size is 3)

4 个答案:

答案 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();
        }