Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从Listview和数据库中删除项目?_Android_Sqlite_Listview - Fatal编程技术网

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

Android 如何从Listview和数据库中删除项目?,android,sqlite,listview,Android,Sqlite,Listview,我知道这个问题被问了很多,但我发现很多答案都不令人满意 我有一个Baseadapter,它通过数据库显示列表。信息通过光标从数据库传递到列表,光标将光标添加到arraylist,arraylist随后填充listview。我想通过contextmenu删除listitem,并将其从listview和数据库中删除。目前,我正在使用adaptercontextmenuinfo对象获取我传递给database类中的delete方法的位置和/或id,但info.id与database _id不对应。目前

我知道这个问题被问了很多,但我发现很多答案都不令人满意

我有一个Baseadapter,它通过数据库显示列表。信息通过光标从数据库传递到列表,光标将光标添加到arraylist,arraylist随后填充listview。我想通过contextmenu删除listitem,并将其从listview和数据库中删除。目前,我正在使用adaptercontextmenuinfo对象获取我传递给database类中的delete方法的位置和/或id,但info.id与database _id不对应。目前我能够成功地从listadapter中删除行条目,但无法从数据库中删除。任何帮助都将不胜感激。 (注意:我的数据库有3列,第一列是_id) 上下文菜单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){
        }
    }

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

Java中字符串的比较是通过
.equals()
equalsIgnoreCase()
方法完成的,而不是通过
=
这可能是无法访问您的语句的原因。如果您这样做,
“这”==“那”
表示您正在检查它们是否具有相同的引用。(是的,它是可到达的,因为它们都是字符串:P)


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

我找到了答案。这是:

        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();

谢谢if语句不是问题所在,该代码将正确执行。问题是传递sqlite数据库行的_id。我知道info.id正在返回listview中的行号,这不一定是sqlite数据库的id,但如果您有更多if-else语句,则会使您可以访问所有语句。我认为您使用的不是数据库中的id,而是listview的id?@nikola:正在访问代码,我已经通过调试日志确认了这一点。这就是我的意思和所说的:)是的,它是可以到达的,我对此没有异议。:)