Sobes.tech
Junior — Middle

Comment peut-on implémenter un système d'onglets avec historique de navigation sans utiliser de fragments?

sobes.tech IA

Réponse de l'IA

Pour implémenter un système d’onglets avec historique de navigation sans utiliser de fragments, plusieurs approches sont possibles :

  1. Utilisation de plusieurs Activity. Chaque onglet est une Activity distincte. Lors du changement d’onglet, l’Activity correspondante est lancée, et l’historique de navigation de chaque Activity est conservé par le système.

  2. ViewPager avec ViewGroup et gestion personnalisée de l’état. Au lieu de fragments, on peut utiliser un ViewPager ou un conteneur personnalisé, dans lequel une View distincte est créée pour chaque onglet (par exemple, un Layout personnalisé). Pour sauvegarder l’historique de navigation, on peut stocker une pile d’états dans chaque View ou utiliser des structures de données séparées.

  3. Utilisation du composant Navigation avec NavHostFragment remplacé par un conteneur personnalisé — mais cela se rapproche déjà des fragments.

  4. Sauvegarder l’état manuellement. Lors du changement d’onglet, sauvegarder l’état de l’écran actuel (par exemple, données du formulaire, position du scroll) dans un ViewModel ou un Bundle, et le restaurer lors du retour.

Exemple d’une approche simple avec View et 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]
    }
}

Ainsi, il est possible de gérer manuellement l’état et l’historique de navigation sans fragments, en utilisant ViewModel et Views personnalisées pour chaque onglet.