android - viewpager - fragmentstatepageradapter
Cómo forzar a ViewPager a volver a crear instancias de sus elementos (3)
Esta pregunta ya tiene una respuesta aquí:
- ViewPager PagerAdapter no actualizando la Vista 36 respuestas
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.