Chcę zrozumieć ten wyjątek w celu wprowadzenia poprawnej poprawki.java.lang.IllegalStateException: Fragment już nie istnieje dla klucza f1: index 3
Przegląd:
Jest ViewPager i używa FragmentStatePagerAdapter instancję 2 fragmenty poprzez GetItem i MyFragmentClass.newInstance(...)
.
adaptera GetItem wygląda następująco:
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
switch(position) {
case 0:
fragment = MyFragment2.newInstance(par1);
break;
case 1:
fragment = MyFragment2.newInstance(par2, par3);
break;
}
return fragment;
}
Problem:
Kiedy działalność jest zniszczony i stworzył kolejny adapter jest ponownie intantiated fragmenty stworzone dzięki MyFragmentClass.newInstance(...)
... ale potem na tej linii:
pager.setAdapter(adapter);
uzyskać wspomniany wyjątek.
Spojrzałem w źródle, gdzie jest wyjątek, to w ten sposób:
@Override
public Fragment getFragment(Bundle bundle, String key) {
int index = bundle.getInt(key, -1);
if (index == -1) {
return null;
}
if (index >= mActive.size()) {
throw new IllegalStateException("Fragement no longer exists for key "
+ key + ": index " + index);
}
Fragment f = mActive.get(index);
if (f == null) {
throw new IllegalStateException("Fragement no longer exists for key "
+ key + ": index " + index);
}
return f;
}
więc wiązka przechodzi tam z jakiegoś stanu, który odwołuje się moje stare fragmenty, ale to nie odpowiadają obecny stan (mActive
), a wyjątek zostanie zgłoszony.
Nie rozumiem, co kryje się za tym pomysłem, ani w jaki sposób mam tworzyć fragmenty ... więc nie mam pojęcia, jak rozwiązać problem.
Próbowałem też pewną sztuczkę dostałem od innego kontekstu:
pager.setOffscreenPageLimit(1);
W celu uniknięcia że fragmenty są zniszczone, gdy są poza ekranem (w przypadku 2 stron viewpager, choć don nie wiem, czy działa dobrze z adapterem stanu). Ale nie wydaje się być związane, przynajmniej, to nie pomaga, nadal uzyskać ten sam wyjątek.
To, co zrobiłem teraz, to spróbuj bloku catch wokół linii, no i dostaję puste strony zamiast crash boxa, również nie jest dobre.
czy znalazłeś działające rozwiązanie dla twojego problemu? – savepopulation
Czy kiedykolwiek znalazłeś rozwiązanie? –
Nie pamiętam, przepraszam :( – Ixx