![](/img/trans.png)
[英]How to delete an item from both database as well as listview Android?
[英]Delete item from both, database and listview on clicking Delete Button
我需要從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();
}
然后,當用戶的朋友在ListView中顯示為項目時,我有了FriendList.java類。 當我長按一個項目時,在對話框中會出現“刪除”和“取消”選項。 現在,當我單擊刪除時,該項目將從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的contact變量。
它是編譯錯誤。 您需要將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 });
}
我認為問題在於位置不是數據庫中的相應ID。 一種可能的解決方案是在此列表項中添加帶有您的聯系人的數據庫ID的標簽。 而當您刪除它時,您將獲得帶有id的標簽,並從數據庫中刪除該項目。
編輯(添加說明):
我會在您的listviewadapter中添加以下內容:
yourcontactview.setTag(contact.getId());
在其中將帶有相應聯系人數據庫ID的標簽添加到視圖中。
然后在刪除聯系人的位置,我將得到您想要刪除的聯系人,如下所示:
Contact deletecontact = db.getContact(view.getTag());
db.deleteContact(deletecontact);
當然,您可以將deleteContact(Contact contact)更改為提供ID而不是contactobject的方法。
希望這可以工作。
您可以先從數據庫中刪除,然后再從ListView中刪除。 並建議Iterator刪除列表元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.