Определите, когда ViewPager меняет страницы
У меня есть три страницы (фрагменты) внутри ViewPager, однако я хочу отображать только элемент меню для двух из этих страниц.
Код, указанный в предыдущем SO-ответе, не работает:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser == true) { }
else if (isVisibleToUser == false) { }
}
Eclipse говорит, что @Override не требуется, и супер не может быть установлен. Система никогда не вызывалась системой, и даже если бы я мог определить, какая страница отображается в данный момент? Могу ли я помочь здесь?
Ответы
Ответ 1
Используйте ViewPager.onPageChangeListener
:
viewPager.addOnPageChangeListener(new OnPageChangeListener() {
public void onPageScrollStateChanged(int state) {}
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
public void onPageSelected(int position) {
// Check if this is the page you want.
}
});
Ответ 2
ViewPager.setOnPageChangeListener
устарел. Теперь вам нужно использовать ViewPager.addOnPageChangeListener
.
например,
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
Ответ 3
Вы также можете использовать ViewPager.SimpleOnPageChangeListener
вместо ViewPager.OnPageChangeListener
и переопределять только те методы, которые вы хотите использовать.
viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
// optional
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { }
// optional
@Override
public void onPageSelected(int position) { }
// optional
@Override
public void onPageScrollStateChanged(int state) { }
});
Надеюсь, что эта помощь:)
Edit:
В соответствии с API-интерфейсом Android, setOnPageChangeListener (ViewPager.OnPageChangeListener listener)
устарел. Проверьте этот URL: - Android ViewPager API
Ответ 4
Для Котлина
view_pager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
}
override fun onPageSelected(position: Int) {
}
})
Ответ 5
Для ViewPager2,
viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
}
})
где OnPageChangeCallback
- статический класс с тремя методами:
onPageScrolled(int position, float positionOffset, @Px int positionOffsetPixels),
onPageSelected(int position),
onPageScrollStateChanged(@ScrollState int state)