2011-11-24 10 views
7

Oto scenariusz, który powoduje problemy:Błąd fragmentu Backstack podczas zastępowania fragmentów w transakcji?

  1. zacznę się acitivity z ViewGroup że będziemy trzymać prezentowanych fragmentów.
  2. Załaduję fragment A do tej grupy widoków, wywołując .replace() w transakcji, którą zapisuję na backstacku.
  3. Wczytuję Fragment B do grupy View, zastępując Fragment A. Ponownie zapisuję transakcję.
  4. Obracam urządzenie dwukrotnie.
  5. Przy drugim obrocie fragment A (obecnie niewidoczny) spowoduje zgłoszenie wyjątku NullPointer.

Ten wyjątek jest zgłaszany przez fragment A, ponieważ zapisuję niektóre wartości widoków (EditTexts np.) W jego metodzie onSaveInstanceState(). Wygląda na to, że podczas drugiej rotacji system nie tworzy tych widoków, więc gdy pytam ich wartości, otrzymuję wyjątek NullPointer. Czy można tego w jakiś sposób uniknąć? Lub używa operacji .replace w transkacji fragmentu zapisanych na backstack bez nadzoru?

Odpowiedz

3

miałem to jednak nie dość przypomnieć sobie specyfikę, co zrobiłem, aby naprawić, ale ogólnie rzecz biorąc (i przeprosiny za wysypisko mózgu) I wykonaj następujące czynności:

  1. Wezwania setRetainInstance(true) w onCreate aby uniknąć fragment rekreacyjnej

  2. Zapisz stan edycji kontroli itp onSaveInstanceState być stosowane, jeżeli działalność jest zabity i masz przywrócony z niepuste wiązki (nie należy się niezerowym tobołek na orientację zmień z 1.)

  3. Utrzymanie wartości kontrolnych edycji w zmiennych składowych (jako fragment nie zostanie odtworzony) zapewnienie one aktualizowane w onDestroyView z kontroli edytować, a następnie wykorzystać je w celu przywrócenia wartości edit kontrolnych w onCreateView

  4. Have flaga ustawiona na true w onCreateView i false w onDestroyView i upewnij się, że nie dotykam elementów sterujących interfejsu użytkownika, gdy widok nie jest w pobliżu.

BTW Korzystanie replace dodając transakcję do tyłu stosu jest zupełnie OK.

Mam nadzieję, że jest coś, co pomaga. Piotr.

+3

Zauważyłem, że przyjąłeś tę odpowiedź ... co okazało się przydatne? –

Powiązane problemy