Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo forzar a ViewPager a volver a instanciar sus elementos

Estoy usando ViewPager para permitir que el usuario pase entre sus vistas. ¿Hay alguna forma de forzar a este ViewPager a volver a cargar / re-instanciar sus vistas en caso de que ya no son válidas o necesita ser actualizado? Intenté llamar a notifyDataSetChanged() en su adaptador pero esto no invoca instantiateItem() método otra vez.

EDITAR

Aquí está la clase que se extiende desde ViewPager y su definición de adaptador. A continuación se muestra el método refresh() que llamo cuando deseo forzar la actualización de elementos.

 public class DayFlipper extends ViewPager { public class FlipperAdapter extends PagerAdapter { @Override public int getCount() { return DayFlipper.DAY_HISTORY; } @Override public void startUpdate(View container) { } @Override public Object instantiateItem(View container, int position) { Log.d(TAG, "instantiateItem(): " + position); Date d = DateHelper.getBot(); for (int i = 0; i < position; i++) { d = DateHelper.getTomorrow(d); } d = DateHelper.normalize(d); CubbiesView cv = new CubbiesView(mContext); cv.setLifeDate(d); ((ViewPager) container).addView(cv, 0); // add map cv.setCubbieMap(mMap); cv.initEntries(d); return cv; } @Override public void destroyItem(View container, int position, Object object) { ((ViewPager) container).removeView((CubbiesView) object); } @Override public void finishUpdate(View container) { } @Override public boolean isViewFromObject(View view, Object object) { return view == ((CubbiesView) object); } @Override public Parcelable saveState() { return null; } @Override public void restoreState(Parcelable state, ClassLoader loader) { } } ... public void refresh() { getAdapter().notifyDataSetChanged(); } } 

3 Solutions collect form web for “Cómo forzar a ViewPager a volver a instanciar sus elementos”

Tenía el mismo problema. Para mí trabajó para llamar

 viewPage.setAdapter( adapter ); 

Nuevamente, lo que provocó la reinstanciación de las páginas de nuevo.

He encontrado una solución. Es sólo una solución a mi problema pero actualmente la única solución.

ViewPager PagerAdapter no actualizar la vista

 public int getItemPosition(Object object) { return POSITION_NONE; } 

¿Alguien sabe si esto es un error o no?

 public class DayFlipper extends ViewPager { private Flipperadapter adapter; public class FlipperAdapter extends PagerAdapter { @Override public int getCount() { return DayFlipper.DAY_HISTORY; } @Override public void startUpdate(View container) { } @Override public Object instantiateItem(View container, int position) { Log.d(TAG, "instantiateItem(): " + position); Date d = DateHelper.getBot(); for (int i = 0; i < position; i++) { d = DateHelper.getTomorrow(d); } d = DateHelper.normalize(d); CubbiesView cv = new CubbiesView(mContext); cv.setLifeDate(d); ((ViewPager) container).addView(cv, 0); // add map cv.setCubbieMap(mMap); cv.initEntries(d); adpter = FlipperAdapter.this; return cv; } @Override public void destroyItem(View container, int position, Object object) { ((ViewPager) container).removeView((CubbiesView) object); } @Override public void finishUpdate(View container) { } @Override public boolean isViewFromObject(View view, Object object) { return view == ((CubbiesView) object); } @Override public Parcelable saveState() { return null; } @Override public void restoreState(Parcelable state, ClassLoader loader) { } } ... public void refresh() { adapter().notifyDataSetChanged(); } } 

prueba esto.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.