Я бачу ці методи як більш чистий підхід до доступу до даних мого списку. Замість того, щоб безпосередньо звертатися до мого об’єкта адаптера через щось подібне, myListData.get(position)я можу просто зателефонувати як адаптер adapter.get(position).
Те ж саме стосується getItemId. Зазвичай я використовував би цей метод, коли хочу виконати якесь завдання на основі унікального ідентифікатора об'єкта у списку. Це особливо корисно при роботі з базою даних. Повертається idможе бути посиланням на об'єкт у базі даних, над яким я потім міг виконувати різні операції (оновлення / видалення / тощо).
Тому замість доступу до ідентифікатора від необробленого об'єкта даних, як myListData.get(position).getId()ви можете використовувати adapter.getItemId(position).
Одним із прикладів того, де я відчував, що мені потрібно використовувати ці методи, був проект, що використовує SeparatedListViewAdapter . Цей адаптер може містити кілька різних типів адаптерів, кожен з яких представляє дані іншого типу (як правило). Під час виклику getItem(position)на SeparatedListViewAdapterоб'єкт, який повертається, може бути різним, залежно від того, який "розділ" позиції полягає у тому, що ви його надіслали.
Наприклад, якщо у вас 2 розділів в списку (фруктів і цукерки): Якщо ви використовували getItem(position)і positionопинилися на елементі в фруктовому розділі, ви отримаєте інший об'єкт , ніж якби ви запросили getItem(position)з positionвказує на елемент в карамелі розділ. Потім ви можете повернути якесь постійне значення ідентифікатора, в getItemId(position)якому відображається, який тип даних getItem(position)повертається, або використовувати instanceofдля визначення того, який об’єкт у вас є.
Крім того, що я згадував, я ніколи не відчував, що мені справді потрібно використовувати ці методи
getItemId()вArrayAdapter()завжди повертається-1зassert false : "TODO"; return -1;