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



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



Я viewPager.setCurrentItem(1); настройки первого пункта.



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

513   8  

8 ответов:

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

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

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

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

вы поймете, что 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) {

    }
});

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

для этой проблемы onpagechange listener является лучшим, но он также будет иметь одну небольшую ошибку, которая не будет обнаруживать время начала времени 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();
        }
    });

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

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

Comments

    Ничего не найдено.