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

时间:2015-08-02 11:51:51

标签: java android listview

我需要从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类型的联系变量。

4 个答案:

答案 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删除列表元素。