簡體   English   中英

單擊刪除按鈕從數據庫和列表視圖中刪除項目

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM