如何获取Android版ViewPager的当前页码?


84

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

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

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

Answers:


179

在最新的软件包中,您也可以使用

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

非常感谢一个人..它的工作原理..您以前在ViewPager上工作吗?
sam_k 2011年

@Necronet不,不应该。PageListener类应该是内部类,而不是嵌套类。
dcow

有时在寻呼机图像的开头会出现空指针异常,对于更可靠的解决方案,我建议这样做,对我来说很好。stackoverflow.com/a/13831450/2296787
MBH

setOnPageChangeListener()已弃用,请addOnPageChangeListener()改用。
ZzZombo


17

如果您只想要该职位,vp.getCurrentItem()将其提供给您,则无需为此单独应用onPageChangeListener()。


8

您将发现不建议使用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) {

    }
});

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

1
不推荐使用setOnPageChangeListener。使用addOnPageChangeListener而不是setOnPageChangeListener。
塞林

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

5

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


3
您必须在Android SDK Manager中更新兼容性软件包,然后才可以使用该方法。
krisDrOid 2012年

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();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.