我需要从ListView中永久删除一个项目,然后从数据库中删除。我有一个DatabaseHandler.java类,其删除功能为:
// Deleting single contact, in DatabaseHandler.java class
public void deleteContact(Contact contact) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
new String[] { String.valueOf(contact.getID()) });
db.close();
}
然后我有一个FriendList.java类,当用户的朋友在ListView中显示为项目时。当我长按一个项目时,我在对话框中选择“删除”和“取消”。现在,当我点击删除时,该项目将从ListView中删除,但不会从数据库中删除。如何从数据库中删除它? 获取“删除”和“取消”选项的代码
listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int position, long id) {
// TODO Auto-generated method stub
Intent i = new Intent(FriendList.this, Delete_Confirm.class).addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
//I am sending position of listitem in putExtra below//
i.putExtra("position", position);
startActivityForResult(i,CONFIRM);
item2 = (String) arg0.getItemAtPosition(position);
//Toast.makeText(FriendList.this, "Clicked"+item2, Toast.LENGTH_SHORT).show();
int l = item2.length();
c=0;
for(int j=0; j<=l; j++){
if(item2.charAt(j) != '9' || item2.charAt(j+1) != '1'){
c++;
}
else {
//Do nothing
break;
}
num = item2.substring(c, l);
}
Toast.makeText(FriendList.this, "Clicked: "+num, Toast.LENGTH_SHORT).show();
return true;
}
});
onActivityResult的相应代码如下:
@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
switch (reqCode) {
case (CONFIRM) :
if(resultCode==RESULT_OK){
int posi = data.getIntExtra("position",0);
Log.d("msg","position is " + posi);
Log.d("msg","Do we reach here?");
final StableArrayAdapter adapter = new StableArrayAdapter(this,
android.R.layout.simple_list_item_1, list);
//db.deleteContact(posi);
list.remove(posi);
listview.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
break;
}}
请建议我如何从数据库中删除它。任何帮助将受到高度赞赏。
编辑: 在取消注释db.deleteContact(posi)时,我收到以下错误: DatabaseHandler类型中的deleteContact(Contact)方法不适用于arguments(int)
请注意,函数deleteContact具有Contact类型的联系变量。
答案 0 :(得分:2)
它是一个编译错误。 您需要将Contact对象传递给方法,而不是整数。
答案 1 :(得分:1)
删除时....尝试从数据库删除第一,然后从 ListView 删除..
例如:
db.deleteContact(list.get(posi)); // this will get string
list.remove(posi);
DatabaseHandler类.......
public void deleteContact(String name){
Log.d("Name:",""+ name);
db.delete(TABLE_CONTACTS, KEY_NAME + " = ?", new String[] { name });
}
答案 2 :(得分:0)
我认为问题是该位置不是数据库中的相应ID。一个可能的解决方案是添加一个标签,其中包含您在此列表项中的联系人的数据库ID。当您删除它时,您将获得带有id的标记并从数据库中删除该项。
编辑(补充说明):
我会在你的listviewadapter中添加如下内容:
yourcontactview.setTag(contact.getId());
在其中添加具有相应联系人的数据库ID的标记。
然后你删除联系人的地方我会得到你想要删除的联系人:
Contact deletecontact = db.getContact(view.getTag());
db.deleteContact(deletecontact);
当然你可以改变你的 deleteContact(联系人联系人)指向您提供id而不是contactobject的方法。
这应该可行。
答案 3 :(得分:0)
您可以先从数据库中删除,然后再从ListView中删除。并建议Iterator删除列表元素。