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
Determine when a ViewPager changes pages
提问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.setOnPageChangeListener
is deprecated now. You now need to use ViewPager.addOnPageChangeListener
instead.
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.SimpleOnPageChangeListener
instead of ViewPager.OnPageChangeListener
and 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 OnPageChangeCallback
is a static class with three methods:
其中OnPageChangeCallback
是具有三个方法的静态类:
onPageScrolled(int position, float positionOffset, @Px int positionOffsetPixels),
onPageSelected(int position),
onPageScrollStateChanged(@ScrollState int state)