Sobes.tech
Junior — Middle

¿Cómo se puede implementar un sistema de pestañas con historial de navegación sin usar fragmentos?

sobes.tech AI

Respuesta de la IA

Para implementar un sistema de pestañas con historial de navegación sin usar fragmentos, se pueden emplear varios enfoques:

  1. Uso de varias Activity. Cada pestaña es una Activity separada. Al cambiar entre pestañas, se inicia la Activity correspondiente, y el historial de navegación dentro de cada Activity se mantiene por el sistema.

  2. ViewPager con ViewGroup y gestión personalizada del estado. En lugar de fragmentos, se puede usar un ViewPager o un contenedor personalizado, en el que se crea un View separado para cada pestaña (por ejemplo, un Layout personalizado). Para guardar el historial de navegación, se puede almacenar una pila de estados dentro de cada View o usar estructuras de datos separadas.

  3. Uso del componente Navigation con NavHostFragment reemplazado por un contenedor personalizado — pero esto ya se acerca a los fragmentos.

  4. Guardar el estado manualmente. Al cambiar de pestañas, guardar el estado de la pantalla actual (por ejemplo, datos del formulario, posición del scroll) en un ViewModel o en un Bundle, y restaurarlo al volver.

Ejemplo de un enfoque simple con View y 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]
    }
}

De esta manera, se puede gestionar manualmente el estado y el historial de navegación sin fragmentos, usando ViewModel y Views personalizadas para cada pestaña.