Определите, когда 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)