【发布时间】:2011-11-14 05:00:02
【问题描述】:
我想知道ViewPager 的当前页面位置。我创建了一个适配器并将这个适配器设置为ViewPager。现在我想知道当前视图的当前页码或位置,因为我想在该特定页面上启动一些额外的事件。
我使用viewPager.setCurrentItem(1); 设置第一项。
有没有类似的获取当前页面的方法?
【问题讨论】:
我想知道ViewPager 的当前页面位置。我创建了一个适配器并将这个适配器设置为ViewPager。现在我想知道当前视图的当前页码或位置,因为我想在该特定页面上启动一些额外的事件。
我使用viewPager.setCurrentItem(1); 设置第一项。
有没有类似的获取当前页面的方法?
【问题讨论】:
在最新的包中你也可以使用
vp.getCurrentItem()
或
vp 是 viewPager,
pageListener = new PageListener();
vp.setOnPageChangeListener(pageListener);
您必须为您的 viewPager 放置一个页面更改侦听器。 viewPager 上没有获取当前页面的方法。
private int currentPage;
private static class PageListener extends SimpleOnPageChangeListener{
public void onPageSelected(int position) {
Log.i(TAG, "page selected " + position);
currentPage = position;
}
}
【讨论】:
setOnPageChangeListener() 已弃用,请改用addOnPageChangeListener()。
有一个方法object_of_ViewPager.getCurrentItem()返回view pager当前查看页面的位置
【讨论】:
如果你只想要这个职位,vp.getCurrentItem() 会给你,不需要单独为这个目的应用 onPageChangeListener()。
【讨论】:
你会发现 setOnPageChangeListener 已被弃用,使用 addOnPageChangeListener,如下:
ViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if(position == 1){ // if you want the second page, for example
//Your code here
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
【讨论】:
对于这个问题 Onpagechange 监听器是最好的,但是它也会有一个小错误,它不会检测到第 0 个位置的开始时间一旦你改变页面它会开始检测页面选择的位置.. .对于这个问题,我找到了最简单的解决方案
1.您必须保持选定的位置值然后使用它....
2.案例1:起始位置始终为零....
案例 2:假设如果您设置当前项目意味着您将该值设置为保持位置
3.然后在您的活动中使用该维护来执行您的操作...
Public int maintain=0;
myViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i2) {
//Toast.makeText(MyActivity.this, i+" Is Selected "+data.size(), Toast.LENGTH_SHORT).show();
}
@Override
public void onPageSelected( int i) {
// here you will get the position of selected page
maintain = i;
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
updateButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MyActivity.this, i+" Is Selected "+data.size(), Toast.LENGTH_SHORT).show();
data.set(maintain, "Replaced "+maintain);
myViewPager.getAdapter().notifyDataSetChanged();
}
});
【讨论】:
getCurrentItem(),实际上并没有为第一页和最后一页提供正确的位置我修复了它添加此代码:
public void CalcPostion() {
current = viewPager.getCurrentItem();
if ((last == current) && (current != 1) && (current != 0)) {
current = current + 1;
viewPager.setCurrentItem(current);
}
if ((last == 1) && (current == 1)) {
last = 0;
current = 0;
}
display();
last = current;
}
【讨论】:
setOnPageChangeListener() 方法已弃用。采用 addOnPageChangeListener(OnPageChangeListener) 代替。
您可以使用OnPageChangeListener 并在onPageSelected() 方法中获取位置,这是一个示例:
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
Log.d(TAG, "my position is : " + position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
或者直接使用getCurrentItem()获取真实位置:
viewPager.getCurrentItem();
【讨论】:
viewpager 中没有任何方法 getCurrentItem()。我已经检查过 API
【讨论】: