Как узнать номер текущей страницы ViewPager для Android? - PullRequest
79 голосов
/ 14 ноября 2011

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

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

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

Ответы [ 8 ]

165 голосов
/ 14 ноября 2011

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

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;
        }
    }
46 голосов
/ 11 марта 2012

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

15 голосов
/ 30 ноября 2011

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

7 голосов
/ 27 июля 2015

Вы поймете, что 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 голосов
/ 07 января 2014

Для этой проблемы лучший слушатель 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();
        }
    });
6 голосов
/ 25 мая 2013

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 голосов
/ 26 ноября 2016

Метод 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();
5 голосов
/ 04 января 2012

Нет метода getCurrentItem () в viewpager.i, который уже проверял API

...