Некоторая путаница в методе instantiateItem (контейнер ViewGroup, int position) PagerAdapter
public Object instantiateItem(ViewGroup container, int position) {
ImageView view = new ImageView();
container.addView(view);
return view;
}
Я прочитал некоторый пример кода PagerAdapter, и все они пишут метод addview. Это выше простой код, и я знаю, что "return view" используется для возврата представления для отображения. Но что такое container.addView(вид)
делать?
Ответы
Ответ 1
Добавление представления в контейнер на самом деле делает его отображаемым на экране. Объект, возвращаемый instantiateItem
, является только ключом/идентификатором; просто случается так, что использование фактического представления для этой цели имеет тенденцию быть удобным, если вы не используете что-то вроде Fragment
для управления представлением для страницы. (См. Источник для FragmentPagerAdapter
для примера.)
Метод PagerAdapter isViewFromObject
помогает пейджеру знать, какое представление принадлежит ключу. Если вы просто возвращаете представление в качестве ключевого объекта, вы можете реализовать этот метод тривиально, как:
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
Ответ 2
В соответствии с комментариями в Source Code of PageAdapter
public abstract Object instantiateItem(View container, int position);
Создайте страницу для данной позиции. Адаптер отвечает для добавления представления в контейнер, указанный здесь, хотя это только должен гарантировать, что это будет сделано к тому времени, когда оно вернется из
Контейнер Содержит View, в котором будет отображаться страница.
Позиция Позиция страницы, которую необходимо создать.
Возвращает объект, представляющий новую страницу. Это не нужно быть просмотром, но может быть другим контейнером страницы.