it-swarm-pt.tech

PagerAdapter Android, é uma posição atual

Eu quero obter a posição atual da visão visível do meu PagerAdapter

Eu não vi uma função óbvia como getPosition() e quero uma.

Eu quero adicionar um objeto em seu arraylist nessa posição, mas preciso conhecê-lo primeiro

24
CQM

Você usaria:

int position = mViewPager.getCurrentItem()
42
Jona

Eu tive esse problema e não consegui obter o método getCurrentItem().

Acabei recebendo a posição do ViewPager e não do PageAdapter. O método onPageSelected(int currentPage) está obtendo a página exibida no momento.

//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. 
    }

});

Fazê-lo no PageAdaper não funcionou para mim, pois quero pré-carregar imagens que não são visíveis. A posição que é passada instantiateItem(View collection, int position) do PageAdapter` é a posição do próximo item inicializado. Isso não tem nada a ver com o item que é exibido.

23
philipp

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

se eu escrever depois dessa linha 

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

mostrará no logcat a página atual do artigo quando o oncreate estiver sendo executado que é sempre 0

noteice eu usei o objeto para o visualizador auto-não o adaptador.

3
Shereef Marzouk

Aqui está uma solução atualizada que eu mesmo usei. Como setOnPageChangeListener agora está obsoleto, você deve usar 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) {

        }
    });

A implementação acima exibe o índice correto na minha TextView para que as posições 0 e o último item da listcurrentInventory.size() sejam exibidas corretamente. Espero que isso ajude alguém procurando por uma solução atualizada.

1
Phil Culver