Я бачу ці методи як більш чистий підхід до доступу до даних мого списку. Замість того, щоб безпосередньо звертатися до мого об’єкта адаптера через щось подібне, 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;