Voici une traduction du superbe article de Delyan Kratunov avec son accord sous la licence CC BY-NC 2.0

Android a un problème de fragmentation. Non, pas ce problème de fragmentation auquel vous pensez tous, qui est des versions. Je parlerais plutôt du problème des Fragments.

Depuis la sortie d'Honeycomb, Google a introduit le système des fragments de manière à faciliter le développement pour les tablettes et les téléphones.

Les "Activity" reste toujours la façon de réaliser les écrans, cependant nous pouvons à présent structurer les écrans avec de multiples fragments, chacun avec son propre cycle de vie.

L'exemple classique est celui des deux fragments, avec d'une part la liste et de l'autre la partie détail - chacun peut être affiché dans une seule activity sur les téléphones, mais aller ensemble sur un écran pour une tablette.
masterFlowDetails

Les fragments sont spéciale

Afin de donner à tous les développeurs la possibilité d'utiliser cette nouvelle façon de faire pour les applications, Google à du mettre à disposition les fragments sur les appareils ayant d'ancienne version du système d'exploitation. Google a pour cela réalisé une bibliothèque de support intitulé: support_library.

La bibliothèque de support est une bête étrange; elle ne se contente pas d'être une couche rétro-compatible, elle réimplémente entièrement l'infrastucture des fragments. Même sur les dispositifs disposant d'une version égale ou suppérieur à Honeycomb, le support des fragments provient donc toujours de la bibliothèque et non pas du système d'exploitation de base. (Cette indication sera importante pour plus tard)

Les Poupées russes se rangent correctement

poupées russes

Le principal problème lié à l'utilisation des fragments est la communication. Elle est rapidement compliqué du fait que toutes les communication entre les fragments doivent passer par l'activity qui les contients. Les fragments imbriqués (Nested Fragments) n'été pas pris en charge et conduisé à toutes sortes de bug au niveau de leur cycle de vie. Cela Jusqu'à l'arrivé de l'API 17!

Jelly Bean 4.2 introduit finalement les fragments imbriqué et leur support est aussi ajouté à la bibliotéque de support aussi! Un rêve d'architecture informatique qui devient réalité! Une encapsulation des éléments visuels et des parties logiques, plus d'activity fourre tout, toute est bien qui fini bien!

Cool... Eu... A propos de ça...

Les trois bugs les plus gênants avec les fragments imbriqués

Delyan Kratunov a fait une application de démonstration de ces bugs, son code source

Terminologie: Les fragments racines (root fragments) sont les fragments qui ont été ajoutés au FragmentManager de l'activity. Tout les autres sont des fragments imbriqués. Mêmes règles pour les gestionnaires de fragments

1. Animer les fragments imbriqués correctement est presque impossible

2. La méthode setRetainInstance est hérité

3. La méthode onActivityResult est cassé