Mam kod klienta. Dla wszystkich fragmentów jest tylko jedno działanie, tj. Pojedyncza aktywność polega na zarządzaniu wszystkimi fragmentami.
Ta aktywność zawiera następujący kod dla dowolnego fragmentu na końcu metody tego fragmentu
Na przykład - fragment MoreFragment:
MoreFragment firstFragment = new MoreFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.article_fragment, firstFragment)
.addToBackStack(null).commit();
Więc,
1) Jakie jest znaczenie, addToBackStack(null)
po którym następuje acommit()
?
2) Dlaczego musisz przekazać parametr zerowy do addToBackStack
?
3) Jak zdobyć ten fragment po dodaniu w ten sposób?
Wygląda na to, że ten kod jest bezużyteczny, ponieważ uruchomiłem kod bez ostatniej linii .addToBackStack(null).commit()
i działał bez żadnych problemów.
android
android-fragments
Mój Boże
źródło
źródło
Odpowiedzi:
Cytowanie dokumentów:
Kolejność, w jakiej dodajesz zmiany do FragmentTransaction, nie ma znaczenia, z wyjątkiem:
Musisz zadzwonić
commit()
ostatni. Jeśli dodajesz wiele fragmentów do tego samego kontenera, kolejność ich dodawania określa kolejność ich wyświetlania w hierarchii widoków.Więc musisz się zobowiązać w końcu.
Nie musi to być null, może to być ciąg. Jeśli nie chcesz, po prostu podaj null.
O:
Jeśli chcesz przejść do poprzedniego fragmentu, dodaj go do stosu. Zależy to więc od tego, czy chcesz dodać fragment do stosu.
Masz już instancję fragmentu
firstFragment
. Więc nie wiem, co masz na myśli, mówiąc o zdobyciu fragmentu później.Więcej informacji @
http://developer.android.com/guide/components/fragments.html
http://developer.android.com/reference/android/app/FragmentTransaction.html#addToBackStack(java.lang.String)
źródło
getFragmentManager().popBackStackImmediate()
jeśli przycisk Wstecz może to zrobić samodzielnie z / bez podania parametru? Zobacz odpowiedź - stackoverflow.com/questions/21156153/…tag
Ciąg waddToBackStack(String name)
daje sposób znaleźć stos z powrotem na później pop bezpośrednio do tej lokalizacji. Miał być użyty w metodziepopToBackStack(String name, int flags)
:Innymi słowy, będzie przesuwał twój tylny stos, dopóki nie znajdzie fragmentu, który został dodany przez
name
inaddToBackStack(String name)
.Na przykład, jeśli wykonasz serię dodatków lub zastąpisz menedżera fragmentów, podając nazwy „frag1”, „frag2”, „frag3”, „frag4”, a później chcesz wrócić bezpośrednio do fragmentu 2 dodanego za pomocą addToBackStack („ frag2 ”), dzwonisz
popToBackStack("frag2", 0)
.Więc,
Użyj
.addToBackStack("fragName")
: jeśli chcesz późniejpopToBackStack(String name, int flags)
zdjąć więcej niż jeden tylny stos.Użyj
.addToBackStack(null)
: Jeśli nie chcesz później zdejmować więcej niż jednego tylnego stosu, ale nadal chcesz zdejmować jeden na raz. Zrób to nawet, jeśli nie będziesz jawnie wywoływał popToBackStack (), ale zamiast tego pozwolisz domyślnej implementacji klawisza wstecznego na obsługę stosu wstecznego.Użycie
.disallowAddToBackStack()
: Jeśli nie chcesz, aby naciśnij wstecz lub wywołaj popBackStack () jawnie. Zapewni to, że żadna część kodu nie używa .addToBackStack ().źródło
Twoje odpowiedzi są przestarzałe. Jeśli nie chcesz dodawać fragmentów do tylnego stosu, użyj poniższego fragmentu kodu:
public static void replaceFragment (@NonNull FragmentManager fragmentManager, @NonNull Fragment fragment, int frameId){ checkNotNull(fragmentManager); checkNotNull(fragment); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.replace(frameId, fragment); transaction.disallowAddToBackStack(); // <-- This makes magic! transaction.commit(); }
Poniżej masz ładny przykład, jak go używać:
źródło
disallowAddToBackStack
, to wszelkie przyszłe wywołania addToBackStack rzucą wyjątek IllegalStateException. Jeśli metoda addToBackStack została już wywołana, ta metoda zgłosi wyjątek IllegalStateException.