2013-05-25 10 views
32

Użyłem metody commit w moim projekcie, który zbudował ją z fragmentami.Jaka jest różnica między commit() i commitAllowingStateLoss() w Fragments

W każdym razie, czasami otrzymywałem błąd IllegalStateException: Can not perform this action after onSaveInstanceState i nie mogłem znaleźć żadnego dobrego rozwiązania na ten temat, ale tylko tę metodę commitAllowingStateLoss(). Zmieniłem funkcję zatwierdzania na commitAllowingStateLoss(), ale nie testowałem jej zbyt długo, więc czy ta funkcja może mi pomóc? I główne pytanie, jaka jest różnica między commit() i commitAllowingStateLoss()?

Odpowiedz

72

Istnieje tylko jedna różnica między commit() a commitAllowingStateLoss(): ta ostatnia nie zgłasza wyjątku w przypadku utraty stanu. Poza tym mają identyczne zachowanie.

Zobacz mój blog post na ten temat, aby uzyskać więcej informacji.

+1

Różnica jest bardziej subtelna. Funkcja 'commit()' może wygenerować zdarzenie wyjątku, jeśli nie nastąpi utrata stanu. Na przykład 'commit()' zawsze zgłasza wyjątek po wywołaniu z 'LoaderCallbacks.onLoadFinished()', nawet w sytuacjach, w których 'commitAllowingStateLoss()' zapisuje transakcję bez utraty stanu. Oczywiście, _sometimes_ state nie może zostać zapisane podczas pracy z 'onLoadFinished()'. –

Powiązane problemy