ListView无法删除项目

时间:2012-12-04 14:52:49

标签: listview search

我遇到了一个无法解决的问题。

当我向我的数据库添加项目时,我尝试填充listView并从" "中移除任何等于listView的项目,这些项目是3个空格,而不是从数据库中只是让用户看不到空行。调用方法load()来执行此操作。我一直在nullPointerException。它似乎找到了项目(我用System.out.println()测试了它)但是当调用remove方法时它会崩溃。

private void load() {       
    Cursor c=helper.getById(taskId);
    c.moveToFirst();                
    String[] temp = getArray(helper.getPart(c));

    ArrayAdapter<String> arrayAdapter =      
             new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, temp);
    lv.setAdapter(arrayAdapter); 

    int count = arrayAdapter.getCount();
    for (int i = 0; i < count; i++) {
        if (arrayAdapter.getItem(i).equals("   ")) {
            arrayAdapter.remove(arrayAdapter.getItem(i));
        }                    
    }

    arrayAdapter.notifyDataSetChanged();

    c.close();
}

1 个答案:

答案 0 :(得分:1)

好吧,因为当您在循环中执行删除时,列表正在缩小。

让我们说开头的大小是10(所以索引0 - 9),然后当你删除符合条件的第一个项目时,实际大小会回到9,但是在你的循环中你仍然有“我&lt; 10“当您尝试访问索引i = 9时,您有一个NullPointer Exception

尝试以下方法:

        for (int i = 0; i < arrayAdapter.getCount(); i++) {
             if(arrayAdapter.getItem(i).equals("   ")) {
                 arrayAdapter.remove(arrayAdapter.getItem(i));
             }                   
         }

请注意,我已将count变量替换为循环内的getCount()。当你这样做时,你应该永远不会有NullPointer Exception