Як отримати поточний номер сторінки ViewPager для Android?


84

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

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

Чи існує подібний метод отримання поточної сторінки?

Відповіді:


180

в останніх пакунках, які ви також можете використовувати

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

@Necronet ні, не повинен. Клас PageListener повинен бути внутрішнім, а не вкладеним класом.
dcow

Я іноді отримую виняток з нульовим покажчиком на початку зображень пейджера, для більш надійних рішень я пропоную це, для мене це чудово працює. stackoverflow.com/a/13831450/2296787
MBH

setOnPageChangeListener()застаріло, використовуйте addOnPageChangeListener()замість цього.
ZzZombo,

47

Існує метод, object_of_ViewPager.getCurrentItem()який повертає позицію сторінки, що переглядається, сторінки перегляду пейджера


Я насправді опублікував цю відповідь спочатку @ChuckBoris, все ж ця, схоже, набрала більше голосів і, мабуть, схвалення. Дивні шляхи цього сайту :)
devanshu_kaushik

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.in немає жодного методу getCurrentItem (). Я вже перевірив API


3
Вам доведеться оновити пакет сумісності в Android SDK Manager, тоді лише u отримаєте цей метод.
krisDrOid

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();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.