2012-12-04 150 views
0

我有一个问题,我无法解决。ListView无法删除项目

当我将项目添加到我的数据库,我尝试填充我的listViewlistView删除等于" "任何项目,这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(); 
} 
+0

你在哪里得到NPE? – Max

回答

1

那么它发生的原因是,当您在循环中执行删除操作时,列表正在缩小。我们假设在开始时大小为10(所以索引0 - 9),然后当您删除与您的条件匹配的第一个项目时,实际大小将返回到9,但在您的循环中仍然有“当你试图访问索引i = 9时,我有一个。

尝试以下操作:

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

请注意,我用getCount()环内更换您的count变量。当你这样做时,你永远不应该有NullPointer Exception