Устаревший метод PagerAdapter.instantiateItem()

Мне любопытно, почему instantiateItem устарел в пользу новой версии. Изменение заключается в том, что теперь он получает ViewGroup вместо более общего View.

Устаревший метод

public Object instantiateItem (View container, int position)

Новый метод

public Object instantiateItem (ViewGroup container, int position)

Примечание. Это изменение также произошло с destroyItem, startUpdate, finishUpdate и setPrimaryItem.

Ответ 1

Я предполагаю, что это было сделано, потому что эти методы всегда вызывают с ViewGroup, а не с более общим View. Таким образом, предоставление параметра как ViewGroup является удобством, позволяющим разработчикам избегать всегда проверки и ввода ввода. Поэтому вместо просмотра этого кода снова и снова:

ViewGroup parent;
if (container instanceof ViewGroup) {
    parent = (ViewGroup) container;
}
else {
    throw new IllegalArgumentException("container must be a ViewGroup");
}

Исполнитель может просто напрямую использовать container.

И, фактически, вы можете видеть, что это именно причина в сообщении от Adam Powell:

Ошибка 5327146 - Tweaks и документы API ViewPager

PagerAdapter ранее рассматривал экземпляры View как параметры для нескольких его методов, ведущих к большому количеству литья в ViewGroup в адаптере реализации.

Измените их, чтобы взять группы представлений. Реализация по умолчанию осуществляется через к устаревшим заглушкам с существующими сигнатурами, адаптеры, чтобы продолжать работать без изменений.

Ответ 2

Дело в том, что контейнер для ViewPager должен содержать другие представления, и действительно не имеет смысла передавать объект общего вида в этот метод, поскольку контейнер всегда будет представлять собой ViewGroup.