У меня ViewPager
, который я использую для отображения нескольких фрагментов, у меня также есть TextView
на моем FragmentActivity
. Мне нужно изменить текст в TextView
в зависимости от того, какой фрагмент в данный момент выбран в ViewPager
. Проблема, с которой я столкнулся: ViewPager
имеет некоторый механизм кэширования, он создает фрагменты, прежде чем они действительно будут видны для пользователя, например, когда я выбираю вторую страницу в ViewPager
фрагменте на третьей странице, также созданной. Более того, я не могу определить внутри фрагмента, это фрагмент, видимый сейчас или просто созданный ViewPager
, но не очень видимый для пользователя. Я попытался использовать OnPageChangeListener
для этого, но внесенные в него изменения были неприемлемыми для меня медленными (страница прокручивалась, а затем меняла TextView
)
Что мне действительно нужно: Мне нужно определить, какой фрагмент в данный момент отображается в ViewPager
, независимо от FragmentActivity
или от Fragment
. Как я могу это достичь?
Определите, какой фрагмент в настоящее время отображается в ViewPager
Ответ 1
ViewPager.OnPageChangeListener
- очевидный подход. И как вы заметили, onPageSelected(int position)
не вызывается до тех пор, пока страница не будет центрирована (если вы медленно прокручиваете страницу нажатием и удерживанием).
Что мне действительно нужно: мне нужно определить, какой фрагмент в настоящее время виден в ViewPager, независимо от FragmentActivity или самого фрагмента. Как я могу достичь этого?
Во-первых, вы не определили "в настоящее время видимый". В a ViewPager
две страницы могут быть видны при прокручивании между ними, и какой из них "в настоящее время виден" в середине салфетки? Мое предположение заключается в том, что вы считаете, что страница "более видимая" будет "в настоящее время видимой".
Сказав это, я рассмотрю использование onPageScrolled (int position, float positionOffset, int positionOffsetPixels)
. Похоже, что positionOffset
может предоставить вам необходимую информацию. Я бы проверил его с некоторыми заявлениями о регистрации, чтобы увидеть, какие данные вернутся.