确定ViewPager何时更改页面

And*_*bon 133 android android-widget android-viewpager

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

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

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

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

}
Run Code Online (Sandbox Code Playgroud)

Eclipse说不需要@Override,也不能设置super.它从未被系统调用,即使它是如何确定当前显示哪个页面?我可以帮忙吗?

Jor*_*oru 263

使用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.
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用SimpleOnPageChangeListener,只覆盖onPageSelected (43认同)
  • 不推荐使用setOnPageChangeListener,您可以使用addOnPageChangeListener (28认同)
  • 这个东西已被弃用了.使用`viewPager.addOnPageChangeListener` (3认同)

Jay*_*ala 116

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

        }
    });
Run Code Online (Sandbox Code Playgroud)

  • 我似乎不明白.绝对是初学者.那么我们把这些方法放在哪里呢.请帮我在哪里学习`addOnPageChangeListener`. (2认同)
  • @RoCk使用SimpleOnPageChangeListener,您只需要覆盖实际想要使用的方法.例如,请参见http://stackoverflow.com/a/31961397/608312. (2认同)

Hem*_*rma 37

您也可以使用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) { }
});
Run Code Online (Sandbox Code Playgroud)

希望这有帮助:)

编辑: 根据android API,setOnPageChangeListener (ViewPager.OnPageChangeListener listener)不推荐使用.请检查此网址: - Android ViewPager API


Jat*_*eva 32

For ViewPager2,

viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
  override fun onPageSelected(position: Int) {
    super.onPageSelected(position)
  }
})
Run Code Online (Sandbox Code Playgroud)

where OnPageChangeCallback is a static class with three methods:

onPageScrolled(int position, float positionOffset, @Px int positionOffsetPixels),
onPageSelected(int position), 
onPageScrollStateChanged(@ScrollState int state)
Run Code Online (Sandbox Code Playgroud)


Kis*_*nki 10

对于科特林,

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) {
            }
        })
Run Code Online (Sandbox Code Playgroud)