如何从Listview和数据库中删除项目?

时间:2011-12-25 21:39:09

标签: android sqlite listview

我知道这个问题已被提出很多问题,但我发现的许多答案都不尽如人意。

我有一个Baseadapter,它通过数据库显示一个列表。信息通过游标从数据库传递到列表,游标将光标添加到arraylist,然后arraylist填充listview。我想通过contextmenu删除listitem,并从listview和数据库中删除它。目前,我使用adaptercontextmenuinfo对象来获取我传递给数据库类中的delete方法的位置和/或id,但是info.id与数据库_id不对应。目前,我能够从listadapter成功删除行条目,但不能从数据库中删除。任何帮助将非常感激。 (注意:我的数据库有3列,第一列是_id) ContextMenu java:

@Override
    public boolean onContextItemSelected(MenuItem item) {
        if(item.getTitle() == "Delete"){ //if "delete" is selected
            AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();

            dba.deleteRow(info.id);
            DATA.remove(info.position);
            adapter.notifyDataSetChanged();

数据库删除行方法:

public void deleteRow(long rowId){
        db = dbhelper.getWritableDatabase();
        try{
            db.delete(Constants.TABLE_NAME, Constants.KEY_ID + "="+rowId,null);
        }catch(Exception e){
        }
    }

我知道这里涉及很多代码。如果您想要更多,请告诉我。谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

比较Java中的字符串是通过.equals()equalsIgnoreCase()方法完成的,而不是== 这可能是导致您的陈述无法访问的原因。如果你这样做"this"=="that"意味着你正在检查它们是否具有相同的参考。 (是的,它可以到达,因为它们都是字符串:P)

确保您的数据库对象不为null,并检查是否捕获到任何异常。另外:尝试从光标中删除数据。

答案 1 :(得分:0)

我想出了答案。这是:

        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
        Cursor c = dba.getsavedcontacts();
        c.moveToPosition(info.position);
        String id = c.getString(c.getColumnIndex(Constants.KEY_ID));
                    dba.open();
            dba.deleteRow(Long.parseLong(id));//remove entry from database according to rowID
            DATA.remove(info.position); //remove entry from arrayadapter, will remove entry from listview
            adapter.notifyDataSetChanged();
            c.close();