viewpager - Android PagerAdapter, obtener posición actual
slide android (4)
Quiero obtener la posición actual de la vista visible de mi PagerAdapter
No vi una función obvia como getPosition()
y quiero una.
Quiero agregar un objeto a su lista de arrays en esa posición, pero necesito saberlo primero
Aquí hay una solución actualizada que usé yo mismo. Como setOnPageChangeListener
ahora está en desuso, debes 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) {
}
});
La implementación anterior muestra el índice correcto en mi TextView
para que las posiciones 0
y el último elemento en la lista currentInventory.size()
muestren correctamente. Espero que esto ayude a alguien a buscar una solución actualizada.
Tuve este problema y no pude obtener el getCurrentItem()
method.
Terminé obteniendo el puesto de ViewPager
y no del PageAdapter
. El onPageSelected(int currentPage)
está obteniendo la página que se muestra actualmente.
//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.
}
});
Hacerlo en PageAdaper
no me funcionó ya que quiero cargar imágenes que no están visibles. La posición que se pasa al elemento instantiateItem(View collection, int position)
de PageAdapter` es la posición del siguiente elemento inicializado. Esto no tiene nada que ver con el elemento que se muestra.
Utilizarías:
int position = mViewPager.getCurrentItem()
si escribo después de esa línea
Log.i("pager",myPager.getCurrentItem()+"");
Mostrará en el logcat la página del elemento actual mientras se ejecuta oncreate, que siempre es 0
noteice que he usado el objeto para el viewpager, no el adaptador.