Powiedzmy, że mam aktywność, która ma fragmenty dodane programowo:
private void animateToFragment(Fragment newFragment, String tag) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, newFragment, tag);
ft.addToBackStack(null);
ft.commit();
}
Jaki jest najlepszy sposób powrotu do poprzedniego fragmentu, który był widoczny?
Znalazłem funkcjonalność przycisku powrotu Trigger po kliknięciu przycisku w Androidzie, ale myślę, że symulowanie zdarzenia klawisza wstecz nie jest właściwym sposobem na obejście go (i nie mogę go również uruchomić):
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
Dzwonienie finish()
tylko zamyka aktywność, która mnie nie interesuje.
Czy jest lepszy sposób, aby to zrobić?
android
android-fragments
back-stack
Aske B.
źródło
źródło
getFragmentManager().popBackStackImmediate();
wykonał lewę. Dzięki.Aby rozwinąć pozostałe odpowiedzi, oto moje rozwiązanie (umieszczone w działaniu):
źródło
fm.getBackStackEntryCount() > 1
, aby wywołać działanie z powrotem, gdy na stosie znajduje się tylko pierwszy fragment.Kiedy aktualizujemy / dodajemy fragmenty,
Powinien zawierać
.addToBackStack()
.Następnie, jeśli damy
getFragments.popBackStackImmediate()
, zwróci wartość true, jeśli dodamy / zaktualizujemy fragmenty i wrócimy do bieżącego ekranu.źródło
Dodaj te linie do metody onBackPressed (). Metoda popBackStackImmediate () przeniesie Cię z powrotem do poprzedniego fragmentu, jeśli masz jakiś fragment na tylnym stosie `
`
źródło
To rozwiązanie działa idealnie w przypadku nawigacji po fragmentach na dolnym pasku, gdy chcesz zamknąć aplikację po ponownym naciśnięciu fragmentu głównego.
Z drugiej strony, gdy otwierasz fragment pomocniczy (fragment w fragmencie), który jest zdefiniowany jako „DetailPizza” w moim kodzie, zwróci poprzedni stan fragmentu podstawowego. Twoje zdrowie !
Wewnątrz działań na plecach wciśnij to:
I uruchom inny fragment w ten sposób:
źródło
Te odpowiedzi nie działają, jeśli nie dodałem metody addToBackStack () do mojej transakcji fragmentu, ale możesz użyć:
z dowolnego fragmentu, aby cofnąć się o jeden krok;
źródło
Programowo wróć do poprzedniego fragmentu, używając następującego kodu.
źródło
Aby ten fragment pojawił się ponownie, po prostu dodaj ten fragment do plecaka, który chcesz ponownie nacisnąć, np .:
W powyższym przypadku otwieram się
LoginFragment
poButton button
naciśnięciu, w tej chwili użytkownik jest włączonySignupFragment
. Więc jeśliaddToBackStack(TAG)
zostanie wywołane, gdzieTAG = "SignupFragment"
, to kiedy przycisk Wstecz zostanie wciśniętyLoginFragment
, wrócimy doSignUpFragment
.Happy Coding!
źródło
Dodając
fragment_tran.addToBackStack(null)
ostatni fragment, mogę wrócić do ostatniego fragmentu.dodawanie nowego fragmentu :
źródło
Przyszedłem tutaj, szukając tego samego, a tymczasem wpadłem na własny pomysł, który moim zdaniem nie jest taki zły i działa, jeśli działa z ViewPager.
Więc to, co zrobiłem, to przesłonić metodę onBackPressed w działaniu nadrzędnym, które przechowuje viewPager, i ustawić, aby zawsze cofała się o 1 pozycję do momentu osiągnięcia pierwszego fragmentu, a następnie zamyka działanie.
Może to mieć spadki, jak za każdym razem, gdy wraca tylko o jedną stronę w lewo, więc może nie działać świetnie, jeśli są tabulatory i zmieniasz pozycje z pominiętymi fragmentami (przejście od 0 do 2, a następnie naciśnięcie wstecz spowoduje włączenie 1 zamiast 0)
W moim przypadku, z 2 fragmentami w viewPager bez zakładek, robi to dobrze.
źródło
Wypróbuj poniższy kod:
źródło