Как получить номер текущей страницы ViewPager для Android?

Я хочу знать текущую позицию страницы ViewPager. Я создаю адаптер и устанавливаю этот адаптер в ViewPager. Теперь я хочу узнать текущий номер страницы или положение текущего представления, потому что я хочу запустить дополнительные события на этой конкретной странице.

Я использовал viewPager.setCurrentItem(1); для установки первого элемента.

Есть ли аналогичный метод для получения текущей страницы?


person sam_k    schedule 14.11.2011    source источник


Ответы (8)


в последних пакетах вы также можете использовать

vp.getCurrentItem()

or

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;
        }
    }
person Yashwanth Kumar    schedule 14.11.2011
comment
Большое спасибо, чувак... это работает... ты раньше работал над ViewPager? - person sam_k; 14.11.2011
comment
@ Necronet нет, не должно. Класс PageListener должен быть внутренним классом, а не вложенным классом. - person dcow; 16.11.2013
comment
Я иногда получаю исключение нулевого указателя в начале изображений пейджера, для более надежных решений я предлагаю это, оно отлично работает для меня. stackoverflow.com/a/13831450/2296787 - person MBH; 24.02.2015
comment
setOnPageChangeListener() устарел, используйте вместо него addOnPageChangeListener(). - person ZzZombo; 07.09.2019

Существует метод object_of_ViewPager.getCurrentItem(), который возвращает позицию текущей просматриваемой страницы пейджера просмотра.

person Krishna Shrestha    schedule 11.03.2012
comment
На самом деле я сначала опубликовал этот ответ @ChuckBoris, но, похоже, этот ответ собрал больше голосов и, по-видимому, одобрение. Странные пути этого сайта :) - person devanshu_kaushik; 16.04.2016

Если вам нужна только позиция, vp.getCurrentItem() предоставит ее вам, нет необходимости применять onPageChangeListener() только для этой цели.

person devanshu_kaushik    schedule 30.11.2011

Вы обнаружите, что 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) {

    }
});
person Geraldo Neto    schedule 27.07.2015

Для этой проблемы лучше всего подходит прослушиватель 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();
        }
    });
person Naveen Kumar    schedule 07.01.2014
comment
setOnPageChangeListener устарел. Используйте addOnPageChangeListener вместо setOnPageChangeListener. - person Selin; 04.01.2016

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;
}
person Da-monk    schedule 25.05.2013

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();
person Jorgesys    schedule 25.11.2016

В viewpager нет никакого метода getCurrentItem(). Я уже проверил API

person raman    schedule 04.01.2012
comment
Вы должны обновить пакет совместимости в Android SDK Manager, тогда только вы получите этот метод. - person krisDrOid; 04.04.2012