gpt4 book ai didi

java - 如何从 ListView 中获取选择行,然后从 Sqlite 数据库中删除

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:20 26 4
gpt4 key购买 nike

我是 Android 新手。当我通过复选框选择多行时,我遇到问题,它将删除最后一行而不是第一行,当我选择整个 ListView 时,它会正确删除所有列表......这是我的主要 Activity 代码

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

这是适配器类代码。我将复选框的状态分配给 boolean 数组

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

最佳答案

在deleteImage方法中,您将在for循环中获取所有id。您将读取所有元素,最后一个将是您要删除的id。将代码更改为以下内容。

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

关于java - 如何从 ListView 中获取选择行,然后从 Sqlite 数据库中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41162895/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com