7

Po aktualizacji z biblioteki pomocy Androida 23.1.1 do najnowszej wersji 25.1.0 zachowanie użytkownika popBackStack() zmieniło się w naszej aplikacji.Zachowanie popBackStack() różni się po uaktualnieniu biblioteki pomocy z 23.1.1 do 25.1.0

Na przykład mam trzy FragmentTransactions na BackStack. Teraz czwarty FragmentTrsansaction został dodany do BackStack. FragmentTransactions to tak:

FragmentTransaction transaction = fragmentManager.beginTransaction() 
    .replace(R.id.fragment_container_single, target, CoreActivity.FRAGMENT_TAG_LEFT) 
    .addToBackStack(<CONCRETE_TRANSACTION_NAME>) 
    .commit(); 

Fragment # 4 ma logiki, gdzie drogi fragment # 5 podczas onViewCreated() automatycznie (wiem, że to brzydki i muszę to zmienić). W każdym razie, kiedy chcę opuścić fragment # 5, chcę wrócić do Fragmentu, który został pokazany przed Fragmentem # 4. Robię to wg nazwy transakcji:

getFragmentManager().popBackStack(“<CONCRETE_TRANSACTION_NAME_4>”, FragmentManager.POP_BACK_STACK_INCLUSIVE); 

lub to:

getFragmentManager().popBackStack(“<CONCRETE_TRANSACTION_NAME_3>”, 0); 

Ale z tego nazwać onCreateView() i onViewCreated() fragmentu # 4 będzie nazwane i Fragment # 5 zostaną dodane bezpośrednio do BackStack . Nawet jeśli powrócę do Fragmentu nr 1 onViewCreated() jest wywoływany dla każdego Fragmentu w BackStack - dla Fragmentu # 2, Fragmentu # 3 i Fragmentu # 4, nawet jeśli nie mają one znaczenia dla FragmentTransaction, do którego chcę powrócić.

Pod biblioteką wsparcia 23.1.1 Pomyślnie wskoczę z powrotem do Fragmentu # 3. Fragment # 4 jest wstawiany włącznie bez wywoływania onViewCreated(). Wydawało mi się to bardziej intuicyjne i słuszne, ponieważ wywołanie onViewCreated() dla Fragmentów "na zewnątrz" mojej FragmentTransaction wydaje się niepotrzebne?

Wiem, addToBackStack() zapisuje tylko stany transakcyjne, a nie same Fragmenty i może być konieczne odtworzenie Fragmentów.

Do tego jest podobne posts, ale chcę zrozumieć, dlaczego łamie się po aktualizacji biblioteki pomocy technicznej. Nigdzie nie mogę znaleźć zmiany. Czy to był Bug, czy jest to Bug?

Zmieniam mój kod.

Dzięki za pomoc!

UPDATE Mam więcej problemów/zmian w cyklu życia po aktualizacji do biblioteki wsparcia 25.1.0. Jest tam Google issue, gdzie dodatkowo komentowałem moje problemy. Obecnie musiałem wrócić do najnowszego 24.2.1 i mieć oko na ten temat. To tylko moje tymczasowe rozwiązanie. Te problemy zaczynają się od biblioteki pomocniczej 25.0.0.

+0

Mam problem z przyciskiem Wstecz w tej wersji. Zastanawiam się, czy jest to związane z tym zagadnieniem cyklu życia. Instancja działania została utworzona ponownie. –

+0

Sprawdziłem to. Kiedy wrócę, moja aktywność nie zostanie odtworzona. Zostało ono wstrzymane i wznowione zgodnie z oczekiwaniami między działaniami. Ale przez cofnięcie się bahauna fragmentów zmieniła się w kolejności. Wygląda na to, że nie jest to związane z nową wersją biblioteki. Może twoja aktywność jest odtwarzana przez Androida, na przykład z powodu małej ilości pamięci? –

+0

Kiedy używam wsparcia 25.x, mam awarie po użyciu przycisku wstecz. Kiedy wrócę do 24.x, działa dobrze. Kilka urządzeń. Kiedy mam trochę czasu, muszę wydestylować minimalny żywotny test. –

Odpowiedz

6

Należy zwrócić uwagę na nową pomoc techniczną 25.1.0.

Coś zmieniono w cyklu życia fragmentu .
Teraz jest nowa funkcja, aby zoptymalizować operacje i odłożyć przejścia fragmentów.

Przeczytaj to: https://code.google.com/p/android/issues/detail?id=230415

+0

Tak, dziękuję, już to rozpoznałem. Nawet jeśli używam 'transaction.setAllowOptimization (false);' nic się nie zmienia i 'onCreateView()' jest wciąż wywoływana. Ale czy myślisz, że jest to efekt nowych optymalizacji, a może nie możemy zmienić starego zachowania? –

+0

Myślę, że nowy cykl życia zmienia przebieg i zachowanie także w twoim przypadku. –

+0

Myślę, że to może być nowa optymalizacja. Tymczasem zostawiłem komentarz w sprawie Google, być może programista może powiedzieć coś konkretnego na ten temat. Lokalnie zmieniłem też mój kod, aby 'onCreateView()' nie wywoływał ponownie FragmentTransaction. Myślę, że inni peaople również z tym walczą i liczymy, że uzyskamy więcej informacji. –

0

Gdyby podobny problem. Naprawiono w 25.3.0