Jak można zaimplementować system zakładek z historią nawigacji bez użycia fragmentów?
sobes.tech AI
Odpowiedź od AI
Aby zaimplementować system zakładek z historią nawigacji bez użycia fragmentów, można zastosować kilka podejść:
-
Użycie wielu Activity. Każda zakładka to osobna Activity. Przy przełączaniu między zakładkami uruchamia się odpowiednia Activity, a historia nawigacji w każdej z nich jest przechowywana przez system.
-
ViewPager z ViewGroup i własnym zarządzaniem stanem. Zamiast fragmentów można użyć ViewPager lub niestandardowego kontenera, w którym dla każdej zakładki tworzony jest osobny View (np. niestandardowy Layout). Aby zapisać historię nawigacji, można przechowywać stos stanów wewnątrz każdego View lub używać osobnych struktur danych.
-
Użycie komponentu Navigation z NavHostFragment zastąpionym własnym kontenerem — ale to już bliżej do fragmentów.
-
Ręczne zapisywanie stanu. Przy przełączaniu zakładek zapisuj stan aktualnego ekranu (np. dane formularza, pozycję scrolla) w ViewModel lub Bundle i przywracaj go po powrocie.
Przykład prostego podejścia z View i ViewModel:
class TabManager {
private val tabStates = mutableMapOf<Int, Bundle>()
fun saveState(tabId: Int, state: Bundle) {
tabStates[tabId] = state
}
fun restoreState(tabId: Int): Bundle? {
return tabStates[tabId]
}
}
W ten sposób można ręcznie zarządzać stanem i historią nawigacji bez fragmentów, korzystając z ViewModel i niestandardowych View dla każdej zakładki.