你如何获得适用于Android的ViewPager的当前页码?

时间:2011-11-14 05:00:02

标签: android android-viewpager

我想知道ViewPager的当前页面位置。我创建了一个适配器并将此适配器设置为ViewPager。现在我想知道当前视图的当前页码或位置,因为我想在该特定页面上启动一些额外的事件。

我使用viewPager.setCurrentItem(1);来设置第一项。

是否有类似的方法来获取当前页面?

8 个答案:

答案 0 :(得分:163)

在最新的套餐中你也可以使用

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

答案 1 :(得分:46)

有一个方法object_of_ViewPager.getCurrentItem(),它返回视图寻呼机当前已查看页面的位置

答案 2 :(得分:15)

如果你只想要这个职位,vp.getCurrentItem()会给你,不需要单独为此目的应用onPageChangeListener()。

答案 3 :(得分:7)

对于这个问题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();
        }
    });

答案 4 :(得分:7)

你会发现不推荐使用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) {

    }
});

答案 5 :(得分:6)

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

答案 6 :(得分:5)

viewpager.i中没有任何方法getCurrentItem()已经检查过API

答案 7 :(得分:5)

  

不推荐使用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();