Sobes.tech
Junior — Middle

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ść:

  1. 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.

  2. 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.

  3. Użycie komponentu Navigation z NavHostFragment zastąpionym własnym kontenerem — ale to już bliżej do fragmentów.

  4. 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.