Параметры приемника щелчка мышью для Android AdapterView - позиция и идентификатор - PullRequest
2 голосов
/ 22 октября 2011

Я устанавливаю прослушиватель длинных щелчков в просмотре списка и хочу использовать индекс выбранного элемента для получения соответствующего объекта.

Подпись метода и определение параметров в соответствии с документами для Android

public abstract boolean onItemLongClick (AdapterView<?> parent, View view, int position, long id)

Parameters
parent     The AbsListView where the click happened
view       The view within the AbsListView that was clicked
position   The position of the view in the list
id         The row id of the item that was clicked

У меня вопрос, будут ли "position" и "id" всегда одинаковыми?Эти определения кажутся взаимозаменяемыми, так в чем же разница?

Ответы [ 2 ]

1 голос
/ 22 октября 2011

Положение и идентификатор могут совпадать, но в действительности это зависит от используемого вами адаптера.

В основном 2 метода в адаптере определяют, каким будет идентификатор - в случае SimpleCursorAdapter (и быстрый просмотр исходного кода) это поле '_id' из запроса, который создал курсор, но методы в адаптере, которые определяют параметр id:

Adapter.getItemId (int) , который позволяет адаптеру конвертировать из позиции в id объекта, и Adapter.hasStableIds () , который позволяет ListView (или что-либо с использованием Адаптер для его кэширования) - хотя вы, вероятно, можете игнорировать hasStableIds ().

Идентификатор будет возвращаемым значением Adapter.getItemId(int), поэтому, если вы используете ArrayAdapter, он будет таким же, как позиция - быстрый поиск исходного кода ArrayAdapter показывает, что он использует return position; для обработки идентификатора :)

Если вы используете нестандартный адаптер, то это полностью ваше дело.

1 голос
/ 22 октября 2011

ID - это идентификатор из базы данных (то есть _ID).position - это позиция в Array или ArrayList.

Например: если у вас есть записи в БД с идентификаторами 1,2,3,4 и вы используете SQL для извлечения записей (и заполнения массиваили ArrayList) у вас может быть какой-то фильтр (предложение where), который отображает только элементы с идентификаторами 1 и 3. Таким образом, у вас есть только 2 возможных position s - 0 и 1.

Разница в том, что вы можетепод идентификатором строки следует понимать некоторый внешний идентификатор, который принадлежит самой строке данных.В отличие от этого position «принадлежит» представлению списка и его адаптеру.

...