2016-12-15 8 views
0

私はAndroidが初めてです。チェックボックスを使用して複数の行を選択すると問題が発生します.1行目の最後の行がリストビュー全体を正しく選択すると削除されます。 ここに私のアクティビティコードseletect行フォームの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(); 
} 

ここにアダプタクラスコードがあります。チェックボックスの状態をブール値の配列に割り当てます。

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; 
      } 
     } 
    }); 

とデータベースの削除機能です。ここ

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

ここdeleteImage方法で、あなたはすべての要素を読み取り、最後はあなたが削除されているIDになりますloop.thereのために、すべてのIDを取得しています。 コードを次のように変更します。

public void deleteImage(int id){ 
    SQLiteDatabase db=this.getReadableDatabase(); 
    db.delete(TABLE_NAME,"id="+id,null); 
} 
関連する問題