2016-12-15 55 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); 
} 
相關問題