2013-04-25 3 views
8

У меня есть ViewPager, который я использую для отображения нескольких фрагментов. У меня также есть TextView на моем FragmentActivity. Мне нужно изменить текст в TextView в зависимости от того, какой фрагмент в данный момент выбран в ViewPager. Проблема, с которой я столкнулся: ViewPager имеет некоторый механизм кэширования, он создает фрагменты, прежде чем они будут действительно видны для пользователя, например, когда я выбираю вторую страницу в ViewPager фрагмент на третьей странице. Более того, я не могу определить внутри фрагмента, этот фрагмент видимый сейчас или он только что создан ViewPager, но не очень заметен для пользователя. Я судимое использовать OnPageChangeListener для этого, но изменения, внесенные в него было неприемлемо медленно для меня (страница прокручивается, а затем мой TextView изменились)

Что я на самом деле нужно: мне нужно определить, какой фрагмент в настоящее время отображается в ViewPager, независимо от FragmentActivity или от Fragment. Как я могу это достичь?Определите, какой фрагмент в настоящее время виден в ViewPager

ответ

7

ViewPager.OnPageChangeListener - очевидный подход здесь. И как вы заметили, onPageSelected(int position) не вызывается до тех пор, пока страница не будет центрирована (если вы медленно прокручиваете страницу нажатием и удерживанием).

Что мне действительно нужно: мне нужно определить, какой фрагмент в настоящее время виден в ViewPager, независимо от FragmentActivity или самого фрагмента. Как я могу это достичь?

Во-первых, вы не определили «в настоящее время видимый». В ViewPager, две страницы могут быть видны при прокручивании между ними, и какой из них «в настоящее время виден» в середине салфетки? Мое предположение заключается в том, что вы считаете, что страница «более видимая» будет «в настоящее время видимой».

Сказав это, я рассмотрю использование onPageScrolled (int position, float positionOffset, int positionOffsetPixels). Полагают, что positionOffset может предоставить вам необходимую информацию. Я бы проверил его с некоторыми заявлениями о регистрации, чтобы увидеть, какие данные возвращаются.

Смежные вопросы