Fragment : qu'est-ce que c'est, fragments et FragmentManager dans Android

Auteur : IT Sectr Publié le : 2026-02-22 Temps de lecture : 7 min

Fragment est un composant d'interface utilisateur réutilisable dans Android qui est intégré dans une Activity et géré via FragmentManager. Chaque fragment possède son propre cycle de vie, layout et état. Fragment simplifie l'adaptation à différentes tailles d'écran et la réutilisation du code. Lisez-en plus dans le guide officiel de Google.

Points clés

  • Fragment — un composant d'UI dans une Activity avec son propre cycle de vie et layout
  • FragmentManager — une classe pour gérer les transactions de fragments et la pile de retour
  • FragmentTransaction — une opération atomique pour ajouter, remplacer ou supprimer des fragments
  • Jetpack Fragment — une bibliothèque pour la rétrocompatibilité jusqu'à Android 1.6 (API 4)
  • ViewModel — un composant partagé pour l'échange de données entre fragments dans une même Activity

Qu'est-ce que Fragment ?

Fragment est un composant d'interface utilisateur modulaire d'Android qui représente une partie de l'écran à l'intérieur d'une Activity. Fragment peut gérer son propre layout, traiter les événements du cycle de vie et sauvegarder son état. Grâce à la modularité, un même fragment peut être utilisé dans différentes Activities et sur différents appareils.

L'API Fragment est apparue dans Android 3.0 (Honeycomb, API 11) en 2011 pour prendre en charge les tablettes. Avant cela, les développeurs devaient créer des Activities séparées pour le téléphone et la tablette. Fragment a permis d'assembler un écran à partir de blocs indépendants. En 2019, Google a publié la bibliothèque Jetpack Fragment avec une rétrocompatibilité jusqu'à l'API 4.

Selon Google (2026), 80% des applications sur Google Play utilisent Fragment sous une forme ou une autre. La bibliothèque Jetpack Fragment a été téléchargée plus de 10 milliards de fois via Google Play Services. Fragment reste un composant clé de l'architecture Android même à l'ère de Jetpack Compose.

Cycle de vie de Fragment

Le cycle de vie de Fragment est plus complexe que celui d'Activity car il dépend de l'état de l'Activity hôte. Fragment passe par les mêmes états qu'Activity mais ajoute ses propres callbacks : onAttach, onCreateView, onViewCreated, onActivityCreated, onDestroyView, onDetach.

Callback de FragmentÉquivalent ActivityObjectif
onAttachavant onCreateFragment attaché à l'Activity
onCreateonCreateInitialisation des données non liées à l'UI
onCreateViewonCreateCréation du layout via inflater
onViewCreatedonCreateLiaison des éléments UI après création de la vue
onDestroyViewonDestroySuppression de la vue, libération des ressources UI
onDetachonDestroyFragment détaché de l'Activity

Comparaison du cycle de vie Fragment et Activity

La principale différence du cycle de vie de Fragment est l'appel de onCreateView et onDestroyView entre onCreate et onDestroy. Fragment peut exister sans UI (si onCreateView retourne null). Après la recréation de l'Activity, FragmentManager restaure automatiquement les fragments.

FragmentManager et transactions

FragmentManager est la classe centrale pour gérer les fragments dans une Activity. Il s'occupe d'ajouter, supprimer, remplacer des fragments, gérer la pile de retour et restaurer l'état. FragmentManager est disponible via supportFragmentManager (AndroidX) ou fragmentManager (ancienne API).

kotlin
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Fragment pas encore ajouté — création
        if (savedInstanceState == null) {
            val transaction = this.supportFragmentManager
                .beginTransaction()
            transaction.add(R.id.fragment_container, ListFragment())
            transaction.addToBackStack(null)
            transaction.commit()
        }
    }

    fun replaceFragment(fragment: Fragment) {
        supportFragmentManager.beginTransaction()
            .replace(R.id.fragment_container, fragment)
            .addToBackStack(null)
            .commit()
    }
}

Les transactions FragmentTransaction sont atomiques. commit() planifie l'exécution pour le prochain cycle de Looper. Pour une exécution immédiate, utilisez commitNow(). addToBackStack(null) ajoute la transaction à la pile de retour — le bouton retour annulera l'opération.

Méthodes du cycle de vie de Fragment

Examinons les méthodes clés du cycle de vie de Fragment avec un exemple en Kotlin. onCreateView crée un layout — contrairement à Activity, la méthode doit retourner une View. onViewCreated est appelé immédiatement après, ici il est sûr de trouver des éléments par id. onDestroyView est le dernier moment pour nettoyer les références de vue.

kotlin
class DetailFragment : Fragment() {

    private var _binding: FragmentDetailBinding? = null
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        _binding = FragmentDetailBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        binding.textTitle.setText("Détails")
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

Le modèle View Binding avec _binding/binding garantit qu'après onDestroyView la référence au layout est nullifiée. Accéder à binding après la destruction de la vue provoquera une NullPointerException. Ce modèle est recommandé par Google pour tous les fragments.

Transfert de données entre fragments

Pour le transfert de données entre fragments, Android propose plusieurs mécanismes. Le plus fiable est un ViewModel partagé entre fragments d'une même Activity. Fragment Result API est adapté pour les événements uniques. Les arguments Bundle sont pour les données lors de la création d'un fragment.

kotlin
// ViewModel partagé pour deux fragments
class SharedViewModel : ViewModel() {
    private val _selectedItem = MutableLiveData<Item>()
    val selectedItem: LiveData<Item> = _selectedItem

    fun select(item: Item) { _selectedItem.setValue(item) }
}

// Fragment A : envoie un événement via Fragment Result API
setFragmentResult("request_key", bundleOf("key" to "value"))

// Fragment B : reçoit l'événement
childFragmentManager.setFragmentResultListener("request_key", this) { requestKey, bundle ->
    val value = bundle.getString("key")
}

Fragment Result API (ajouté dans Fragment 1.3.0) remplace les obsolètes setTargetFragment/onActivityResult. L'API est type-safe, utilise Bundle et ne nécessite pas de connaître le destinataire. Parent FragmentManager agit comme intermédiaire entre les fragments.

Fragment vs Activity : quand choisir quoi

Le choix entre Fragment et Activity dépend de l'architecture de l'application. Fragment est obligatoire pour les layouts adaptatifs (téléphone + tablette), pour les animations de transition personnalisées et pour utiliser Jetpack Navigation. Activity est préférable pour les applications simples avec un ou deux écrans.

CritèreFragmentActivity
Vitesse de créationPlus rapide (composant léger)Plus lente (processus système)
RéutilisabilitéÉlevée (un fragment dans différentes Activities)Faible (chaque écran a sa propre Activity)
Animation de transitionFlexible (FragmentTransaction)Limitée (overridePendingTransition)
Conservation à la rotationAutomatique (le gestionnaire restaure)Manuelle (onSaveInstanceState)
Deep LinksVia Navigation ComponentSupport natif via intent-filter

Jetpack Fragment et Jetpack Navigation

L'approche moderne pour travailler avec Fragment est Jetpack Navigation Component, qui remplace la gestion manuelle de FragmentManager. La bibliothèque fournit NavGraph (graphe de navigation XML), NavHostFragment et Safe Args pour un transfert de données type-safe.

Jetpack Fragment library (androidx.fragment:fragment-ktx) inclut FragmentResult API, DialogFragment, BottomSheetDialogFragment et l'intégration avec des composants Lifecycle-aware. Depuis 2026, Google recommande d'utiliser Fragment uniquement via Jetpack Navigation, pas directement.

xml

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:startDestination="@+id/listFragment">

    <fragment
        android:id="@+id/listFragment"
        android:name=".ListFragment"
        android:label="Liste">
        <action
            android:id="@+id/action_list_to_detail"
            app:destination="@+id/detailFragment" />
    </fragment>

    <fragment
        android:id="@+id/detailFragment"
        android:name=".DetailFragment"
        android:label="Détails" />
</navigation>

Questions fréquentes

Qu'est-ce que FragmentManager ?

FragmentManager est une classe qui gère les transactions de fragments. Elle ajoute, supprime et remplace les fragments dans un conteneur d'Activity. FragmentManager restaure l'état des fragments lors de la recréation de l'Activity et gère la pile de retour.

En quoi Fragment diffère-t-il d'Activity ?

Fragment est une partie de l'UI dans une Activity, il ne peut pas exister de manière indépendante. Fragment survit à la recréation de l'Activity lors de la rotation de l'écran. Activity est un écran complet avec son propre Lifecycle, Fragment dépend du Lifecycle de l'Activity.

Quand utiliser Fragment au lieu d'Activity ?

Fragment — quand un écran se compose de plusieurs blocs indépendants (onglets, maître-détail, adaptation tablette). Activity — quand un écran n'a pas de blocs répétables. Google recommande Single Activity + plusieurs Fragments.

Comment transférer des données entre Fragments ?

Trois façons : via l'Activity parente (un ViewModel partagé), via Fragment Result API (setFragmentResult), via des arguments Bundle lors de la création d'un Fragment. ViewModel est la méthode préférée car les données sont conservées lors de la recréation.

Qu'est-ce qu'une Fragment Transaction ?

Fragment Transaction est une opération atomique qui modifie l'ensemble des fragments. FragmentManager.beginTransaction() ouvre une transaction où l'on peut appeler add, remove, replace, hide, show. Chaque transaction se termine par commit() ou commitNow().

Résumé

  • Fragment est un composant d'UI réutilisable dans une Activity avec son propre cycle de vie, layout et état
  • FragmentManager gère les transactions de fragments et restaure leur état lors de la recréation de l'Activity
  • FragmentTransaction est une opération atomique pour ajouter, remplacer, supprimer et masquer des fragments
  • Le cycle de vie de Fragment comprend six callbacks, de onAttach à onDetach, avec un point supplémentaire onCreateView
  • ViewModel est la méthode recommandée pour échanger des données entre fragments dans une même Activity
  • Fragment Result API fournit un transfert type-safe d'événements uniques entre fragments

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi