Android PagerAdapter, получить текущую позицию - PullRequest
27 голосов
/ 16 декабря 2011

Я хочу получить текущую позицию видимого представления моего PagerAdapter

Я не видел такой очевидной функции, как getPosition(), и я хочу ее.

Я хочу добавить объект в свой список в этой позиции, но сначала мне нужно это знать

Ответы [ 4 ]

46 голосов
/ 17 декабря 2011

Вы бы использовали:

int position = mViewPager.getCurrentItem()
23 голосов
/ 12 декабря 2012

У меня была эта проблема, и я не смог получить метод getCurrentItem().

В итоге я получил позицию от ViewPager, а не от PageAdapter.Метод onPageSelected(int currentPage) получает текущую отображаемую страницу.

//custom PageAdapter implementation
mAdapter = new AwesomePagerAdapter();

//Our custom view pager that extends from ViewPager
mPager = (CustomViewPager) findViewById(R.id.preview_gallery);

mPager.setAdapter(mAdapter);

// get the item that we should be showing from the intent
mCurrentPage = extra.getInt("currentIndex");

// show the item the user picked
mPager.setCurrentItem(mCurrentPage);

// listen for page changes so we can track the current index
mPager.setOnPageChangeListener(new OnPageChangeListener() {

    public void onPageScrollStateChanged(int arg0) {
    }

    public void onPageScrolled(int arg0, float arg1, int arg2) {
    }

    public void onPageSelected(int currentPage) {
        //currentPage is the position that is currently displayed. 
    }

});

Выполнение этого в PageAdaper не помогло мне, так как я хочу предварительно загрузить изображения, которые не видны.Позиция, которая передается instantiateItem(View collection, int position) из PageAdapter`, является позицией следующего инициализированного элемента.Это не имеет ничего общего с отображаемым элементом.

3 голосов
/ 03 января 2012

https://github.com/Shereef/ViewPagerPlusExpandableList/blob/master/src/net/shereef/vewpagerplusexpandablelistexample/ViewPagerPlusExpandableListActivity.java#L204

если я напишу после этой строки

    Log.i("pager",myPager.getCurrentItem()+"");

он покажет в logcat текущую страницу элемента, пока запущено oncreate, которое всегда 0

Заметьте, я использовал объект для окна просмотра, а не для адаптера.

1 голос
/ 26 июля 2018

Вот обновленное решение, которое я использовал сам. Поскольку setOnPageChangeListener устарела, вы должны использовать addOnPageChangeListener.

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            int counterPosition;
            if (position == 0 || position <= currentInventory.size()){
                counterPosition = position + 1;
            } else {
                counterPosition = position;
            }

            viewPagerHeader.setText("Prize " + counterPosition + " of " + currentInventory.size());

        }

        @Override
        public void onPageSelected(int position) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

Приведенная выше реализация отображает правильный индекс в моем TextView, так что позиции 0 и последний элемент в списке currentInventory.size() отображаются правильно. Надеюсь, что это поможет кому-то искать обновленное решение.

...