2016-12-15 54 views
0

我是Android的新手。我有一个问题,当我通过复选框选择多行时,它会删除最后一行,而不是第一行,当我选择整个列表视图时,它会正确删除所有列表.... 这里是我的主要活动代码如何获取选择行表单listview然后从Sqlite数据库中删除

private void showDialog(final String warning, final String s) { 
    AlertDialog.Builder adb = new AlertDialog.Builder(MainActivity.this); 
    adb.setTitle(warning); 

    adb.setMessage(s); 
    adb.setIcon(R.drawable.deleteicon); 

    String btn = "Ok"; 
    if (warning.equals("Warning")) { 
     btn = "Yes"; 

     adb.setNegativeButton("No", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.dismiss(); 
      } 
     }); 

    } 

    adb.setPositiveButton(btn, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      if (warning.equals("Warning")) { 
       int size = image_adapter.checkStatesArray.length; 
       for (int i = size - 1; i > 0; i--) { 
        if (image_adapter.checkStatesArray[i] == true) { 
         db.deleteImage(i); 
        } 
        image_adapter.notifyDataSetChanged(); 
       } 

       // listView.clearChoices(); 
       UpdateList(); 

       /* sparseBooleanArray=listView.getCheckedItemPositions(); 
       for (int i=0;i<sparseBooleanArray.size();i++){ 
        if (sparseBooleanArray.valueAt(i)) { 
         int key = (int) image_adapter.getItemId(i); 
         db.deleteImage(key); 
         //db.deleteImage(key); 
       }*/ 
      } 
     } 
    }); 
    adb.show(); 
} 

这是Adapter类的代码。我分配复选框的状态为布尔数组

viewholder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      int id=(Integer)buttonView.getTag(); 
      Toast.makeText(context, "clickd position"+id, Toast.LENGTH_SHORT).show(); 
      images.get(id).setSelected(buttonView.isChecked()); 
      if (buttonView.isChecked()){ 
       checkStatesArray[id]=true; 
      } 
      else { 
       checkStatesArray[id] = false; 
      } 
     } 
    }); 

和数据库删除funcation。这里

public void deleteImage(int id){ 
    SQLiteDatabase db=this.getReadableDatabase(); 
    Cursor c=this.getAll(); 
    //database=this.getReadableDatabase(); 
    //database.delete(TABLE_NAME,"id="+id,null); 

    c.moveToFirst(); 
    for (int i=0;i<c.getCount();i++){ 
     id=c.getInt(c.getColumnIndex("id")); 
     c.moveToNext(); 
    } 
    db.delete(TABLE_NAME,"id="+id,null); 
} 

回答

1

在这里,在删除图像的方法,你所得到的所有的ID在loop.there你会阅读所有的元素和最后一个将是将要​​删除的ID。 将代码更改为以下。

public void deleteImage(int id){ 
    SQLiteDatabase db=this.getReadableDatabase(); 
    db.delete(TABLE_NAME,"id="+id,null); 
} 
相关问题