je le code suivant:Comment éviter les problèmes de duplication de fragments?
private List<WeakReference<Fragment>> mFragList = new ArrayList<WeakReference<Fragment>>();
@Override
public void onAttachFragment (Fragment fragment) {
mFragList.add(new WeakReference(fragment));
}
public List<Fragment> getActiveFragments() {
ArrayList<Fragment> ret = new ArrayList<Fragment>();
for(WeakReference<Fragment> ref : mFragList) {
Fragment f = ref.get();
if(f != null) {
if(f.isVisible()) {
ret.add(f);
}
}
}
return ret;
}
public Fragment findFragement(String tClass) {
List<Fragment> fragments = getActiveFragments();
for (Fragment fragment : fragments) {
if (tClass.equalsIgnoreCase("Home")) {
if (fragment instanceof ToggleFragment) {
return fragment;
}
} else if (tClass.equalsIgnoreCase("Contacts")) {
if (fragment instanceof ContactFragment) {
return fragment;
}
}
}
return null;
}
Le code fonctionne très bien, mais je crains, pas ce code:
@Override
public void onAttachFragment (Fragment fragment) {
mFragList.add(new WeakReference(fragment));
}
doublons de cause lorsqu'un écran est recréée ou ft.replace() est utilisé?
Y a-t-il un meilleur moyen de contourner ce problème? sans remplacer beaucoup de code ou sans utiliser getsupportfragmentmanager.getfragments()?
Merci!
n'y a-t-il pas d'autre moyen que je peux assurer que la duplication ne se produise pas? pouvez-vous expliquer en ce qui concerne mon code si possible, serait plus facile à comprendre. pas très bon à hashmap –
La manière la plus simple que je puisse penser sans utiliser un fragmentManager est de faire un attribut unique (probablement une chaîne) qui est constant pour chaque instance de votre fragment, et différent pour chaque type de fragment (j'aime appeler le mien "TAG"). Ensuite, vous pouvez parcourir votre ArrayList et vérifier si l'un de vos fragments possède le TAG du fragment que vous essayez d'y placer, et si c'est le cas, remplacez-les. – evanklicker
Y at-il une raison particulière pour laquelle vous ne pouvez pas utiliser un fragmentManager? C'est exactement ce qu'ils sont conçus pour gérer. – evanklicker