Biorąc pod uwagę pokaz przepływu aplikacji w formie graficznej i tekstowej opisanej poniżej.Fragment, który nie znajduje się najwyżej w backstacku, zostaje wznowiony.
- Fragment 1 jest najniższy fragment, ale nie w backstack ustawiając
disallowAddToBackStack
. - Fragment 2 jest pchany na stos, używając
fragmentTransaction.addToBackStack()
. - Nowa instancja fragmentu 1 jest przesuwana na stos.
- Górny najbardziej fragment (fragment 1) jest wyskakiwany ze stosu.
- Aktywność 2 staje się pierwszym planie.
- Aktywność 1 staje się pierwszym planie.
Oto uogólniona metoda użyć do obsługi fragmenty:
private void changeContainerViewTo(int containerViewId, Fragment fragment,
Activity activity, String backStackTag) {
if (fragmentIsAlreadyPresent(containerViewId, fragment, activity)) { return; }
final FragmentTransaction fragmentTransaction =
activity.getFragmentManager().beginTransaction();
fragmentTransaction.replace(containerViewId, fragment);
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
if (backStackTag == null) {
fragmentTransaction.disallowAddToBackStack();
} else {
fragmentTransaction.addToBackStack(backStackTag);
}
fragmentTransaction.commit();
}
problem
gdy aktywność 1 CV w ostatnim etapie najniższy przykład fragmentu 1 zostaje również. W tym momencie fragment 1 zwraca null
na getActivity()
.
Pytanie
- Dlaczego jest fragmentem, który nie znajduje się na najwyższym na stosie wznowione?
- Jeśli wznowienie fragmentu jest poprawne - jak mam obsłużyć oderwany fragment?
Czy pierwsze fragmenty 1 i fragment 2 są używane w tym samym widoku kontenera i jakiej transakcji używasz w drugim etapie? – Evos
Tak, Fragment1 i Fragment2 używają tego samego widoku kontenera. – JJD
A co z typem transakcji: "zamień", "dodaj"? – Evos