Sobes.tech
Junior — Middle

Jak lze implementovat systém záložek s historií navigace bez použití fragmentů?

sobes.tech AI

Odpověď od AI

Pro implementaci systému záložek s historií navigace bez použití fragmentů lze využít několik přístupů:

  1. Použití více aktivit. Každá záložka je samostatná aktivita. Při přepínání mezi záložkami se spustí odpovídající aktivita a historie navigace uvnitř každé aktivity je systémem zachována.

  2. ViewPager s ViewGroup a vlastním řízením stavu. Místo fragmentů lze použít ViewPager nebo vlastní kontejner, ve kterém je pro každou záložku vytvořen samostatný View (například vlastní Layout). Pro uchování historie navigace lze ukládat zásobník stavů uvnitř každého View nebo používat samostatné datové struktury.

  3. Použití komponenty Navigation s NavHostFragment nahrazeným vlastním kontejnerem — ale to je již blíže fragmentům.

  4. Ruční ukládání stavu. Při přepínání záložek ukládejte stav aktuálního obrazovky (například data formuláře, pozici scrollu) do ViewModelu nebo Bundle a obnovujte jej při návratu.

Příklad jednoduchého pří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 způsobem lze ručně spravovat stav a historii navigace bez fragmentů, pomocí ViewModel a vlastních View pro každou záložku.