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:
-
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á.
-
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.
-
Použitie komponentu Navigation s NavHostFragment nahradeným vlastným kontajnerom — ale to je už bližšie k fragmentom.
-
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.