Я вижу эти методы как более чистый подход к доступу к данным моего списка. Вместо прямого доступа к моему объекту адаптера через что-то вроде 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
, указывающим на элемент в разделе candy . Затем вы можете вернуть какое-то постоянное значение идентификатора в getItemId(position)
, которое представляет, какой тип данных getItem(position)
возвращает, или использовать instanceof
, чтобы определить, какой у вас объект.
Кроме того, что я упомянул, я никогда не чувствовал, что мне действительно нужно использовать эти методы