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.
Vous utiliseriez:
int position = mViewPager.getCurrentItem()
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é.
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.
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.