Android 确定 ViewPager 何时更改页面

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11293300/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 06:46:56  来源:igfitidea点击:

Determine when a ViewPager changes pages

androidandroid-widgetandroid-viewpager

提问by Andrew Rabon

I have three pages (Fragments) inside a ViewPager, however I only want to display a menu item for two of those pages.

我在 ViewPager 中有三个页面(片段),但是我只想显示其中两个页面的菜单项。

The code given in a previous SO answerdoes not seem to work:

以前的 SO 答案中给出的代码似乎不起作用:

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

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

}

Eclipse says @Override isn't needed and super can't be set. It's never called by the system, and even if it was how would I determine which page was being shown at the moment? Could I have some help here?

Eclipse 说不需要 @Override 并且无法设置 super。它永远不会被系统调用,即使它是我如何确定此刻正在显示哪个页面?我可以在这里得到一些帮助吗?

回答by Joru

Use the ViewPager.onPageChangeListener:

使用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.
    }
});

回答by Jaydipsinh Zala

ViewPager.setOnPageChangeListeneris deprecated now. You now need to use ViewPager.addOnPageChangeListenerinstead.

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

        }
    });

回答by Hemant Sharma

You can also use ViewPager.SimpleOnPageChangeListenerinstead of ViewPager.OnPageChangeListenerand override only those methods you want to use.

您还可以使用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) { }
});

Hope this help :)

希望这有帮助:)

Edit:As per android APIs, setOnPageChangeListener (ViewPager.OnPageChangeListener listener)is deprecated. Please check this url:- Android ViewPager API

编辑:根据 android API,setOnPageChangeListener (ViewPager.OnPageChangeListener listener)已弃用。请检查此网址:- Android ViewPager API

回答by Kishan Solanki

Kotlin Users,

Kotlin 用户

viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {

            override fun onPageScrollStateChanged(state: Int) {
            }

            override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {

            }

            override fun onPageSelected(position: Int) {
            }
        })

Update 2020 for ViewPager2

ViewPager2 更新 2020

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

回答by Jatin Sachdeva

For ViewPager2,

对于 ViewPager2,

viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
  override fun onPageSelected(position: Int) {
    super.onPageSelected(position)
  }
})

where OnPageChangeCallbackis a static class with three methods:

其中OnPageChangeCallback是具有三个方法的静态类:

onPageScrolled(int position, float positionOffset, @Px int positionOffsetPixels),
onPageSelected(int position), 
onPageScrollStateChanged(@ScrollState int state)