Как получить дочерний вид 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
, если это представление в настоящее время не загружено, либо соответствующее представление.
(Этот вопрос очень прост для этого, в котором я опубликовал тот же ответ).