Представьте себе эту структуру:
У вас есть таблица db Notes с такими 3 записями:
+----+--------------------------+
| ID | Note Text |
+----+--------------------------+
| 43 | Note text blah blah |
| 67 | Note text blah blah blah |
| 85 | Last note |
+----+--------------------------+
и вы реализуете адаптер для обслуживания этих данных.
Теперь давайте посмотрим, что такое позиция и идентификатор элемента в таком случае
позиция - порядковый номер позиции записи в загруженном наборе данных. Например, если вы загрузите эту таблицу с помощью ORDER BY ID ASC
, тогда
- запись с ID 43 будет иметь позицию 0 ,
- запись с ID 67 будет иметь позицию 1 ,
- запись с ID 85 будет иметь позицию 2
itemId - это «первичный ключ» записи, и ваша реализация может возвращать такие значения
- запись с ID 43 должна иметь itemId 43 ,
- запись с ID 67 должна иметь itemId 67 ,
- запись с ID 85 должна иметь itemId 85
position и itemId в стандартных адаптерах Android
ArrayAdapter / SimpleAdapter
В ArrayAdapter
и SimpleAdapter
position и itemId - это одно и то же:
public long getItemId(int position) {
return position;
}
SimpleCursorAdapter (и все типы, которые наследуются от CursorAdapter)
В SimpleCursorAdapter и во всех потомках CursorAdapter itemId имеет значение из _id столбца:
public long getItemId(int position) {
if (mDataValid && mCursor != null) {
if (mCursor.moveToPosition(position)) {
return mCursor.getLong(mRowIDColumn);
} else {
return 0;
}
} else {
return 0;
}
}