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