web-dev-qa-db-fra.com

Android PagerAdapter, obtenir la position actuelle

Je souhaite connaître la position actuelle de la vue visible de mon PagerAdapter

Je n'ai pas vu de fonction évidente telle que getPosition() et j'en veux une.

Je veux ajouter un objet à son arraylist à cette position, mais je dois d'abord le connaître.

24
CQM

Vous utiliseriez:

int position = mViewPager.getCurrentItem()
42
Jona

J'ai eu ce problème et je n'ai pas pu obtenir la méthode getCurrentItem().

J'ai fini par obtenir le poste du ViewPager et non du PageAdapter. La méthode onPageSelected(int currentPage) obtient la page actuellement affichée.

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

});

Le faire dans la PageAdaper n'a pas fonctionné pour moi car je veux précharger des images qui ne sont pas visibles. La position passée instantiateItem(View collection, int position) du PageAdapter` est la position du prochain élément initialisé. Cela n'a rien à voir avec l'élément qui est affiché.

23
philipp

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

si j'écris après cette ligne 

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

il affichera dans le logcat la page d’élément en cours pendant que l’oncreate est en cours d’exécution, qui est toujours 0

noteice j'ai utilisé l'objet pour le viewpager lui-même pas l'adaptateur.

3
Shereef Marzouk

Voici une solution mise à jour que j'ai utilisée moi-même. Puisque setOnPageChangeListener est maintenant obsolète, vous devez utiliser 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) {

        }
    });

L'implémentation ci-dessus affiche l'index correct dans ma TextView afin que les positions 0 et le dernier élément de la listecurrentInventory.size() s'affichent correctement. J'espère que cela aidera quelqu'un à la recherche d'une solution mise à jour.

1
Phil Culver