Sobes.tech
Junior — Middle

Hogyan lehet megvalósítani egy lapfül rendszer navigációs történelem nélkül fragmentek használata nélkül?

sobes.tech MI

Válasz az MI-től

A fragmentek használata nélküli navigációs előzményekkel rendelkező lapok rendszerének megvalósításához több megközelítés is létezik:

  1. Több Activity használata. Minden lap egy külön Activity. A lapok közötti váltáskor a megfelelő Activity indításra kerül, és az egyes Activity-k belső navigációs története a rendszer által kerül megőrzésre.

  2. ViewPager és ViewGroup használata egyedi állapotkezeléssel. A fragmentek helyett használhatunk ViewPager-t vagy egy egyedi konténert, amelyben minden laphoz külön View-t hozunk létre (például egy egyedi Layout). A navigációs történet mentéséhez minden View állapotát egy veremként tárolhatjuk, vagy külön adatszerkezeteket használhatunk.

  3. Navigation komponens használata NavHostFragment helyett egy egyedi konténerrel — de ez már közelebb áll a fragmentekhez.

  4. Állapot manuális mentése. A lapok közötti váltáskor mentse el az aktuális képernyő állapotát (például űrlapadatok, görgetési pozíció) egy ViewModel-ben vagy Bundle-ben, és állítsa vissza, amikor visszatér.

Egyszerű megközelítés példája View és ViewModel segítségével:

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]
    }
}

Így kézben tarthatja az állapotot és a navigációs történelmet fragmentek nélkül, a ViewModel és az egyedi View-k segítségével minden egyes laphoz.