Что ж, похоже, на этот вопрос можно было бы ответить проще и проще ... :-)
Проще говоря, Android позволяет прикрепить long
к любомуListView
элементу, это так просто. Когда система уведомляет вас о выборе пользователя, вы получаете три идентифицирующие переменные, чтобы сказать вам, что было выбрано:
- ссылка на само представление,
- его числовая позиция в списке,
- этот
long
вы прикрепили к отдельным элементам.
Вы сами решаете, какой из этих трех вариантов проще всего решать в вашем конкретном случае, но у вас есть все три варианта на выбор. Думай об этомlong
как о теге, автоматически прикрепленном к элементу, только в том случае, если он еще проще и легче считывается.
Непонимание того, что обычно происходит, основано на простом соглашении. Все адаптеры должны предоставить getItemId()
даже если они на самом деле не используют эту третью идентификацию. Таким образом, по соглашению, эти адаптеры (включая множество в примерах в SDK или по всему Интернету) просто возвращаются position
по одной причине: они всегда уникальны. Тем не менее, если адаптер возвращается position
, это действительно означает, что он вообще не хочет использовать эту функцию, так какposition
как в любом случае он уже известен.
Итак, если вам нужно вернуть любое другое значение, которое вы считаете нужным, не стесняйтесь сделать это:
@Override
public long getItemId(int position) {
return data.get(position).Id;
}
getItemId()
вArrayAdapter()
всегда возвращается-1
сassert false : "TODO"; return -1;