Путаница с идентификатором строки ListView и индексом позиции - PullRequest
3 голосов
/ 12 июля 2011

Я только начинаю погружаться в некоторые базовые разработки для Android и экспериментирую с ListView и интегрирую его с SimpleCursorAdapter. Я просматриваю множество примеров кода в Интернете, но у меня также есть книга, которую можно использовать в качестве справки (Профессиональная разработка приложений для Android 2).

В книге они разрабатывают пример приложения списка дел, в котором элементы списка хранятся в базе данных SQLite с автоинкрементным целочисленным полем первичного ключа.

Пользователь может создавать новые элементы списка, но также может удалять выбранный элемент из списка. В коде, когда происходит удаление, поле первичного ключа ограничивается (в пределах предложения WHERE оператора SQL) атрибутом position элемента, а не rowid.

элемента.

Мне это кажется неправильной реализацией. Глядя на документацию SQLite для AUTOINCREMENT, он говорит, что это значение всегда будет увеличиваться, и старые значения никогда не будут повторно использоваться в одной и той же таблице. Так что, если вы удаляете и добавляете что-то в список, может показаться, что позиция и идентификатор строки могут довольно быстро не синхронизироваться.

Правильно ли тогда считать, что идентификатор строки - это правильный путь для "индексации" таблицы базы данных, а не позиции списка? Я думаю, что позиция будет безопасной для использования, если вы используете обычный ListAdapter, но не подходит для индексации в базе данных.

Ответы [ 2 ]

1 голос
/ 12 июля 2011

Вы можете использовать позицию, чтобы получить курсор к определенной записи списка (и этот курсор будет «строкой» в «таблице», соответствующей идентификатору строки):

Cursor cursor = (Cursor)parent.getItemAtPosition(pos);
int rowCol = c.getColumnIndex("_id");

Тогда вы должны увидеть, что cursor.getLong(rowCol) == id

0 голосов
/ 12 июля 2011

Это определенно плохая практика. Я всегда использую идентификатор строки, чтобы удалить, и использую идентификатор позиции, чтобы получить идентификатор строки курсора. У меня дома есть первое издание этой книги, и я сам еще посмотрю.

...