Определите, какой фрагмент в настоящее время отображается в ViewPager

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

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

Ответ 1

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

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

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

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