У меня есть три страницы (фрагменты) внутри ViewPager, однако я хочу отобразить пункт меню только для двух из этих страниц.
Код, приведенный в предыдущем ответе SO , похоже, не работает:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser == true) { }
else if (isVisibleToUser == false) { }
}
Eclipse говорит, что @Override не требуется, и нельзя установить super. Он никогда не вызывается системой, и даже если бы это было так, как бы я мог определить, какая страница отображается в данный момент? Могу я здесь чем-нибудь помочь?
Ответы:
Используйте
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. } });
источник
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) { } });
источник
addOnPageChangeListener
.ViewPager.SimpleOnPageChangeListener
иViewPager.OnPageChangeListener
о чем упоминалось выше?Вы также можете использовать
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) { } });
Надеюсь на эту помощь :)
Изменить: в соответствии с API Android
setOnPageChangeListener (ViewPager.OnPageChangeListener listener)
устарел. Пожалуйста, проверьте этот URL: - Android ViewPager APIисточник
mViewPager.setOnPageChangeListener();
сейчас он устарел, этот работает нормально.Пользователи Котлина ,
viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrollStateChanged(state: Int) { } override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) { } override fun onPageSelected(position: Int) { } })
Обновление 2020 для ViewPager2
viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { override fun onPageScrollStateChanged(state: Int) { println(state) } override fun onPageScrolled( position: Int, positionOffset: Float, positionOffsetPixels: Int ) { super.onPageScrolled(position, positionOffset, positionOffsetPixels) println(position) } override fun onPageSelected(position: Int) { super.onPageSelected(position) println(position) } })
источник
Для 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)
источник