with viewpager studio sectionspageradapter practice fragments example best android android-widget android-viewpager

android - viewpager - fragmentstatepageradapter



Cómo forzar a ViewPager a volver a crear instancias de sus elementos (3)

Esta pregunta ya tiene una respuesta aquí:

Estoy usando ViewPager para permitir al usuario deslizar entre sus vistas. ¿Hay alguna manera de forzar a este ViewPager a volver a cargar / volver a crear instancias de sus vistas en caso de que ya no sean válidas o necesiten actualizarse? Intenté llamar a notifyDataSetChanged() en su adaptador, pero esto no vuelve a invocar el método instantiateItem() .

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 quiero 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(); } }


He encontrado una solución. Es solo una solución a mi problema, pero actualmente es la única solución.

ViewPager PagerAdapter no actualiza la vista

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

¿Alguien sabe si esto es un error o no?


Tenía el mismo problema. Para mí funcionó llamar

viewPage.setAdapter( adapter );

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


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.