J'ai besoin d'afficher un ViewPager affichant initialement une seule vue. Une fois que cette vue est passée à travers la mesure &, selon le résultat, il se peut que vous deviez modifier le contenu de l'adaptateur. Ce faisant, je suis tombé sur un scénario où le ViewPager ne suivrait pas son mouvement tout en essayant de glisser vers l'élément suivant à partir d'une certaine position.
Je suis sûr que je fais quelque chose de mal dans ma mise en œuvre de l'adaptateur, mais je ne peux pas pointer du doigt le problème. Par souci de démonstration, j'ai créé un adaptateur fictif qui imitera ce qui se passe sur mon projet actuel. Afin de reproduire le problème, essayez de balayer tout le chemin jusqu'à la position 2 (3ème élément), le résultat est que vous ne pouvez pas dépasser la position 1 (2ème élément).Appel de notifyDataSetChanged à partir de instantiateItem()
Merci!
public class CustomAdapter extends PagerAdapter {
int pages = 0;
@Override
public int getCount() {
return pages;
}
@Override
public boolean isViewFromObject(View view, Object o) {
return view == o;
}
public void setPages(int x) {
this.pages = x;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
TextView tv = new TextView(MainActivity.this);
ViewGroup.LayoutParams lp =
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
tv.setLayoutParams(lp);
tv.setText("Position: " + position);
if (position == 0 && pages == 1) {
setPages(2);
notifyDataSetChanged();
}
if (position == 1 && pages == 2) {
setPages(3);
notifyDataSetChanged();
}
container.addView(tv);
return tv;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
Activité (onCreate environ):
CustomAdapter adapter = new CustomAdapter();
adapter.setPages(1);
vp.setAdapter(adapter);
adapter.notifyDataSetChanged();
La méthode instantiateItem ne peut pas appeler la deuxième fois comment résoudre ce problème? –