Как получить дочерний вид ViewPager в заданном элементе

Я постараюсь сделать этот вопрос коротким и простым, насколько это возможно по-человечески.

View activeView = mViewPager.getChildAt(mViewPager.getCurrentItem());

возвращает дочерний вид, когда текущий элемент равен 0 и 1. Но если текущий элемент равен 2, он возвращает null. Почему это?

edit: Позвольте мне перефразировать себя. Как получить дочерний вид ViewPager в любой позиции позиции?

Ответ 1

Оказывается, getChildAt(int) не был правильным. То, что я сделал, было извлечение адаптера, используемого в ViewPager, и нашел мои взгляды оттуда:

adapter = mViewPager.getAdapter();
Fragment fragment = adapter.getItem(mViewPager.getCurrentItem());

View activeView = fragment.getView();

Как уже отмечалось, viewPager будет содержать только текущего дочернего и смежных детей (currentItem() +/- 1), если не указано иначе setOffscreenPageLimit()

Ответ 2

Адаптер вашего пейджера просмотра содержит максимум 2 страницы, то есть 2 вида/фрагмента, остальные из них переработаны. В другом случае вы не упомянули, что у вас может быть 2 страницы/просмотров в ViewPager.

Посмотрите mViewPager.setOffscreenPageLimit()

Ответ 3

Добавить тег в представление возврата Viewpager.

Ниже ссылка поможет вам: fooobar.com/questions/36699/...

Ответ 4

Сколько дочерних представлений должно быть?

Также ViewPager не загружает все дочерние элементы одновременно. Только тот, который он показывает, и следующий. Вы можете использовать mViewPager.setOffscreenPageLimit(), например, 3 или 4, чтобы "предварительно загрузить" больше элементов в просмотрщик.

Ответ 5

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

Решение, которое я предлагаю:

  • полностью отключает адаптер и вид.
  • можно легко запросить представление с любой формой индекса пейджера представления, и он будет возвращен либо null, если это представление в настоящее время не загружено, либо соответствующее представление.

(Этот вопрос очень прост для этого, в котором я опубликовал тот же ответ).