Hej,
Mam ciekawą dla mnie zagwozdkę. Zauważyłem, że nawigując z jednego fragmentu do innego w pewnych wypadkach onDetach() nie jest wywoływane. Nie bardzo rozumiem dlaczego i jestem ciekawy co tak właściwie się dzieje.
Aplikacja korzysta z:
- Navigation Component
- Jednej Aktywności z custom appBarem do przechodzenia do innych fragmentów + navigationDrawer
- Fragmentów, które są podmieniane w tej aktywności
I teraz tak:
-
Jeśli jestem we Fragmencie B i cofnę się do Fragmentu A to we Fragmencie B onDetach() się wywoła.
-
Jeśli jestem we Fragmencie B i przejdę poprzez private fun navigateToCart() { navController.navigate(R.id.cartFragment) } do Fragmentu C to onDetach() Fragmentu B się NIE wywoła.
-
Jeśli jestem we Fragmencie A i przejdę poprzez kliknięcie na item w recyclerView do Fragmentu B to onDetach() Fragmentu A się NIE wywoła.
-
Jeśli jestem we Fragmencie B i przejdę do Fragmentu C używając metody powyżej a potem przejdę do Fragmentu A używając menu z navigationDrawer to onDetach() to onDetach() Fragmentów A i B się wywoła.
Dlaczego? Ma to związek z back stackiem i jest on czyszczony przy przejściu np do Fragmentu A poprzez navigationDrawer? Czy Fragment jest odpinany od Aktywności(wypada z back stack) gdy cofamy się za pomocą przycisku Wstecz i dlatego onDetach() się wywołuje?