Вопрос по android, android-widget, android-viewpager – Определите, когда ViewPager меняет страницы

109

У меня есть три страницы (фрагменты) внутри ViewPager, однако я хочу отображать пункт меню только для двух из этих страниц.

Код, указанный впредыдущий SO ответ не похоже на работу

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);

    if (isVisibleToUser == true) { }
    else if (isVisibleToUser == false) {  }

}

Eclipse говорит, что @Override не нужен и супер не может быть установлен. Он никогда не вызывается системой, и даже если бы это было так, как бы я определил, какая страница показывается в данный момент? Можно мне здесь помочь?

Это работает для меня, и дает немного больше контекста о том, как использовать данное решение:Detect ViewPager tab change inside Fragment. gcl1

Ваш Ответ

4   ответа
35

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

КакmViewPager.setOnPageChangeListener(); устарела, этот работает нормально.
В приведенном выше коде, чтобы определить, изменилось ли состояние, сохраните текущую позицию и сравните ее при прокрутке страницы в методе onPageScrolled.
232

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.
    }
});
Вместо этого вы можете использовать SimpleOnPageChangeListener и переопределять только onPageSelected
setOnPageChangeListener устарела, вы можете использовать addOnPageChangeListener
эта вещь устарела. использованиеviewPager.addOnPageChangeListener
В строке 1 приведена опечатка: SetOnPageChangeListener должно быть setOnPageChangeListener.
112

ViewPager.setOnPageChangeListener устарела сейчас. Теперь вам нужно использоватьViewPager.addOnPageChangeListener вместо.

for example,

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) {

        }
    });
Кажется, я не понимаю. Я абсолютный новичок. Так что же мы вкладываем в эти методы? Пожалуйста, помогите мне, где учитьсяaddOnPageChangeListener.
+1 за информацию, но в чем разница между этими двумяViewPager.SimpleOnPageChangeListener а такжеViewPager.OnPageChangeListener как упоминание выше?
@RoCk С SimpleOnPageChangeListener вам нужно только переопределить методы, которые вы на самом деле хотите использовать. Увидетьstackoverflow.com/a/31961397/608312 например.
8

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) {
            }
        })

Похожие вопросы