J’utilise ViewPager
pour permettre à l’utilisateur de glisser entre ses vues. Existe-t-il un moyen de forcer ce ViewPager
à recharger / ré-instancier ses vues au cas où elles ne seraient plus valides ou devaient être actualisées? J’ai essayé d’appeler notifyDataSetChanged()
sur son adaptateur, mais cela n’invoque pas la méthode notifyDataSetChanged()
.
Voici la classe qui s’étend de ViewPager et sa définition d’adaptateur. Ci-dessous est la méthode refresh()
que j’appelle lorsque je veux forcer à actualiser des éléments.
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(); } }
Eu le même problème. Pour moi, cela a fonctionné pour appeler
viewPage.setAdapter( adapter );
encore une fois ce qui a provoqué la réintroduction des pages à nouveau.
J’ai trouvé une solution. C’est juste une solution à mon problème, mais actuellement la seule solution.
ViewPager PagerAdapter ne met pas à jour la vue
public int getItemPosition(Object object) { return POSITION_NONE; }
Est-ce que quelqu’un sait si c’est un bug ou pas?
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(); } }
essaye ça.