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:
-
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.
-
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.
-
Navigation komponens használata NavHostFragment helyett egy egyedi konténerrel — de ez már közelebb áll a fragmentekhez.
-
Á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.