gpt4 book ai didi

android - 有时无法删除 listview-sqlite 中的项目

转载 作者:行者123 更新时间:2023-11-30 03:12:09 27 4
gpt4 key购买 nike

我在 Android 中创建了一个 ListView 。我的 ListView 数据来自 sqlite 数据库。当用户单击列表中的项目时。将出现删除确认的警告对话框。这是我要从列表中删除的代码:

list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(todaycode.this);
alertDialog.setTitle("Delete from list");
alertDialog.setMessage("Are you sure to delete?");

final int del_position=position;
alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,int which) {
//delete from database
mDb.deleteContact(list_food.get(+ del_position).getId());
//reload
final ArrayList<food_object> list_food = mDb.getAllfood();
final ListView list;
final String[] food_name = new String[list_food.size()];

for(int i=0;i<list_food.size();i++){
food_name[i]=list_food.get(i).getName();}

Integer[] imageId = {
R.drawable.image1,};

final customlist adapter = new customlist(todaycode.this, food_name, imageId);
list=(ListView)findViewById(R.id.listToday);
list.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
});

这是我要从 DBAdapter 中的数据库中删除的代码:

public boolean deleteContact(int id)
{
return db.delete(TABLE_NAME, COL_ID + "=" + id, null) > 0;
}

这段代码是有效的。但有时用户无法从列表中删除项目,直到他们重新加载此 Activity (移动到其他 Activity 并返回)。出现警报对话框,但在用户单击"is"后没有任何反应。

这只会在某个时候发生。并且只出现在列表中的一个项目中,因此如果用户选择列表中的其他项目进行删除,它仍然有效。有人知道为什么会这样吗?

已编辑

经过多次尝试,我得出的结论是错误(无法删除)总是在用户删除第二个项目(用户连续删除)后开始,我仍然不知道为什么会这样

这是我的 DBAdapter 代码,我对其进行了简化 See the Code

这是我的自定义列表代码 See the Code

最佳答案

问题是您可能在表中使用了自动增量 ID。当您从 setOnItemClick 获取 id 时,它实际上是项目的索引而不是 id。因此,当您在索引 3 处删除一个时,该 ID 将被删除,而下次您想要在同一索引处删除时,将不会有该 ID 的项目。

关于android - 有时无法删除 listview-sqlite 中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20768031/

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