Como pode implementar um sistema de abas com histórico de navegação sem usar fragmentos?
sobes.tech IA
Resposta da IA
Para implementar um sistema de abas com histórico de navegação sem usar fragments, podem ser adotadas várias abordagens:
-
Utilização de várias Activity. Cada aba é uma Activity separada. Ao alternar entre abas, a Activity correspondente é iniciada, e o histórico de navegação dentro de cada Activity é mantido pelo sistema.
-
ViewPager com ViewGroup e gestão personalizada do estado. Em vez de fragments, pode-se usar um ViewPager ou um contêiner personalizado, no qual uma View separada é criada para cada aba (por exemplo, um Layout personalizado). Para guardar o histórico de navegação, pode-se armazenar uma pilha de estados dentro de cada View ou usar estruturas de dados separadas.
-
Utilização do componente Navigation com NavHostFragment substituído por um contêiner personalizado — mas isso já se aproxima de fragments.
-
Guardar o estado manualmente. Ao trocar de aba, guardar o estado da tela atual (por exemplo, dados do formulário, posição do scroll) num ViewModel ou num Bundle, e restaurar ao voltar.
Exemplo de uma abordagem simples com View e 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]
}
}
Dessa forma, é possível gerenciar manualmente o estado e o histórico de navegação sem fragments, usando ViewModel e Views personalizadas para cada aba.