Ich habe den folgenden Code:Wie vermeidet man Fragmentierungsprobleme?
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;
}
Der Code funktioniert gut, aber ich habe eine Sorge, würde dieser Code:
@Override
public void onAttachFragment (Fragment fragment) {
mFragList.add(new WeakReference(fragment));
}
Ursache Duplikate, wenn ein Bildschirm neu erstellt wird oder ft.replace() wird eingesetzt?
Gibt es einen besseren Weg dazu? ohne viel Code zu ersetzen oder ohne getsupportfragmentmanager.getfragments() zu verwenden?
Danke!
Gibt es keine andere Möglichkeit, dass Duplikation nicht passieren kann? Kannst du mir meinen Code soweit möglich erläutern, wäre das einfacher zu verstehen. nicht sehr gut bei hashmap –
Der einfachste Weg, den ich mir vorstellen kann, ohne einen fragmentManager zu benutzen, ist ein eindeutiges Attribut (wahrscheinlich ein String), das für jede Instanz Ihres Fragments konstant ist und für jeden Fragmenttyp unterschiedlich ist (ich rufe gerne an) mein "TAG"). Dann können Sie Ihre ArrayList durchlaufen und prüfen, ob eines Ihrer Fragmente den TAG des Fragments enthält, das Sie dort einfügen möchten, und falls ja, ersetzen Sie sie. – evanklicker
Gibt es einen bestimmten Grund, warum Sie einen FragmentManager nicht verwenden können? Genau dafür sind sie konzipiert. – evanklicker