Sobes.tech
Junior — Middle

Ako implementovať systém záložiek s históriou navigácie bez použitia fragmentov?

sobes.tech AI

Odpoveď od AI

Na implementáciu systému záložiek s históriou navigácie bez použitia fragmentov je možné použiť niekoľko prístupov:

  1. Použitie viacerých Activity. Každá záložka je samostatná Activity. Pri prepínaní medzi záložkami sa spustí príslušná Activity a história navigácie v rámci každej Activity je systémom zachovaná.

  2. ViewPager s ViewGroup a vlastným riadením stavu. Namiesto fragmentov možno použiť ViewPager alebo vlastný kontajner, v ktorom sa pre každú záložku vytvorí samostatný View (napríklad vlastný Layout). Na uloženie histórie navigácie je možné ukladať zásobník stavov vnútri každého View alebo použiť samostatné dátové štruktúry.

  3. Použitie komponentu Navigation s NavHostFragment nahradeným vlastným kontajnerom — ale to je už bližšie k fragmentom.

  4. Ručné uloženie stavu. Pri prepínaní záložiek je potrebné uložiť stav aktuálneho obrazovky (napríklad údaje formulára, pozíciu scrollu) do ViewModel alebo Bundle a pri návrate ho obnoviť.

Príklad jednoduchého prístupu s View a 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]
    }
}

Týmto spôsobom je možné ručne spravovať stav a históriu navigácie bez fragmentov, pomocou ViewModel a vlastných View pre každú záložku.