单击“删除”按钮,从数据库和列表视图中删除项目

我需要从ListView中永久删除一个项目,然后从数据库中删除。 我有一个DatabaseHandler.java类,其删除function如下:

// 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)不适用于参数(int)

请注意,函数deleteContact具有Contact类型的联系变量。

删除时….尝试先从数据库中删除然后从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 }); } 

这是一个编译错误。 您需要将Contact对象传递给方法,而不是整数。

您可以先从数据库中删除,然后从ListView中删除。 并建议Iterator删除列表元素。

我认为问题是该位置不是数据库中的相应ID。 一个可能的解决方案是添加一个标签,其中包含您在此listitem中的联系人的数据库ID。 当你删除它时,你得到带有id的标签,并从数据库中删除该项目。

编辑(补充说明):

我会在你的listviewadapter中添加如下内容:

 yourcontactview.setTag(contact.getId()); 

在其中添加具有相应联系人的数据库ID的标记。

然后你删除联系人的地方我会得到你想要删除的联系人,如下所示:

 Contact deletecontact = db.getContact(view.getTag()); db.deleteContact(deletecontact); 

当然,您可以将deleteContact(联系人联系人)更改为您提供id而不是contactobject的方法。

这应该有希望。