У меня была такая же проблема.Это произошло не в контекстном меню / классе, в котором реализован ListView, а при создании таблицы базы данных, столбца _id.При использовании этого синтаксиса:
db.execSQL("CREATE TABLE TABLE_NAME(_id INTEGER AUTO INCREMENT PRIMARY KEY, TITLE TEXT, VALUE REAL);");
AdapterView.AdapterContextMenuInfo.id
всегда возвращает 0
, однако, если этот синтаксис используется:
db.execSQL("CREATE TABLE TABLE_NAME(_id INTEGER PRIMARY KEY AUTOINCREMENT, TITLE TEXT, VALUE REAL);");
AdapterView.AdapterContextMenuInfo.id
всегда возвращаетправильный идентификатор.
Так что есть разница между:
_id INTEGER AUTO INCREMENT PRIMARY KEY
и
_id INTEGER PRIMARY KEY AUTOINCREMENT
секунда работает, первая нет.Что затрудняет отладку, так это то, что оба синтаксически верны.
Еще одним важным моментом является необходимость удаления объекта базы данных из приложения через терминал adb перед повторным запуском приложения, поскольку метод onCreate
класса, который расширяет SQLiteOpenHelper
, не запускается, если база данных уже существует -он срабатывает только в том случае, если этого не происходит, поэтому важно удалить базу данных после внесения исправлений, а затем повторно запустить приложение.
Надеюсь, это поможет.