Dynamiquement supprimer un élément à partir d'un ViewPager avec FragmentStatePagerAdapter
Il existe assez peu de discussions autour de ce thème
- ViewPager PagerAdapter pas la mise à jour de la Vue
- Mise à jour ViewPager dynamiquement?
- Retrait de fragments de FragmentStatePagerAdapter
J'ai essayé différentes solutions (y compris l'invalidation avec POSITION_NONE
)
. Mais je ne comprends toujours pas comment faire pour supprimer un élément correctement.
Ce qui se passe est
- soit j'obtiens une page vide (ce qui signifie le fragment est détruit, mais le
instantiateItem
n'a pas été appelé pour un remplacement) - ou toute chose se bloque probablement parce que la façon dont le Android gère le
fragment instances ne pas correspondre à la façon dont je les garde dans mon
arraylist/sparsearray
S voici ma adaptateur
private class DatePickerPagerAdapter extends FragmentStatePagerAdapter {
ArrayList<Fragment> registeredFragments = new ArrayList<Fragment>();
public DatePickerPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return CreateWishFormDatePaginationFragment.newInstance(position);
}
@Override
public int getItemPosition(Object object){ //doesnt change much..
return PagerAdapter.POSITION_NONE;
}
@Override
public int getCount() {
return iPageCount;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment fragment = (Fragment) super.instantiateItem(container, position);
registeredFragments.add(position, fragment);
return fragment;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, registeredFragments.get(position));
}
public void removePage(ViewGroup pager, int position) {
destroyItem(pager, position, null);
registeredFragments.remove(position);
iPageCount--;
pagerIndicator.notifyDataSetChanged();
pagerAdapter.notifyDataSetChanged();
}
public void addPage() {
iPageCount++;
pagerIndicator.notifyDataSetChanged();
pagerAdapter.notifyDataSetChanged();
}
}
Je suis l'aide d'une vue pager avec ViewPagerIndicator et je veux être en mesure de supprimer une page entre les deux, par exemple.
Donc la question, quelle est la bonne façon de manutention ajout et la suppression des fragments dans un ViewPager?
Merci!
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez supprimer des éléments à partir d'un
ViewPager
, le code suivant n'a pas de sens:Essentiellement, vous créez un
Fragment
basé sur laposition
. N'importe quelle page que vous retirez, la gamme de laposition
va changer à partir de [0,iPageCount
) à [0,iPageCount-1
), ce qui signifie qu'il sera toujours de se débarrasser de la dernièreFragment
.Ce que vous avez besoin est plus ou moins la suivante:
Veuillez vous référer à cette complète exemple pour plus de détails sur retrait de l'élément de FragmentStatePagerAdapter.
FragmentStatePagerAdapter
'sFragmentManager
soins sur l'état de chaqueFragment
.La ViewPager n'est pas supprimer vos fragments avec le code ci-dessus car il charge plusieurs points de vue (ou de fragments dans votre cas) dans la mémoire. En plus de la vue visible, il charge également le point de vue de chaque côté du visible. Ceci fournit la lisse de défilement de l'affichage qui fait la ViewPager tellement cool.
Pour obtenir l'effet que vous voulez, vous devez faire un certain nombre de choses.
Remplacer la méthode d'adaptateur getItemPosition (voir ci-dessous). Lorsque nous appelons mAdapter.notifyDataSetChanged(); la ViewPager interroge l'adaptateur pour déterminer ce qui a changé en termes de positionnement. Nous utilisons cette méthode pour dire que tout a changé afin de retraiter toutes votre point de vue positionnement.
Et voici le code...