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

Я буду держать этот вопрос как можно более коротким и простым.

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

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

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

5 ответов

Решение

Оказывается getChildAt(int) был не правильный подход. Что я сделал, так это извлек адаптер, использованный в ViewPager, и нашел там мои виды:

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

View activeView = fragment.getView();

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

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

Пожалуйста, посмотрите на mViewPager.setOffscreenPageLimit()

Добавить тег в Viewpager Вернуться.

Ниже ссылка поможет вам: /questions/12417211/ne-udalos-poluchit-tekuschij-vid-v-viewpager/12417235#12417235

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

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

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

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

Сколько детей должно быть?

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

Другие вопросы по тегам