确定 ViewPager 何时更改页面

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

上一次标准答案中给出的代码似乎不起作用:

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


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


}

Eclipse 表示不需要@Override,也不能设置 super。它从来没有被系统调用过,即使它是,我又如何确定当时显示的是哪个页面呢?有人能帮帮我吗?

152483 次浏览

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


}
});

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

希望这个能帮上忙:)

编辑: 根据 Android API,setOnPageChangeListener (ViewPager.OnPageChangeListener listener)是不被推荐的,请检查这个 URL:-< a href = “ http://developer.Android.com/reference/Android/support/v4/view/ViewPager.html # setOnPageChangeListener (Android.Support.v4.view.ViewPager.OnPageChangeListener)”rel = “ noReferrer”> Android ViewPager API

科特林用户 ,

viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {


override fun onPageScrollStateChanged(state: Int) {
}


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


}


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

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

对于 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)