web-dev-qa-db-fra.com

Pourquoi des fragments et quand utiliser des fragments au lieu d'activités?

Dans Android API 11+, Google a publié une nouvelle classe appelée Fragment.

Dans les vidéos, Google suggère que, chaque fois que cela est possible ( link1 , link2 ), nous devrions utiliser des fragments au lieu d'activités, mais ils n'ont pas expliqué exactement pourquoi.

Quel est le but des fragments et de certaines utilisations possibles (autres que des exemples d'interface utilisateur pouvant être facilement obtenus avec de simples vues/présentations)?

Ma question concerne les fragments:

  1. Quel est le but d'utiliser un fragment?
  2. Quels sont les avantages et les inconvénients de l’utilisation de fragments par rapport à l’utilisation d’activités/vues/présentations?

Questions bonus:

  1. Pouvez-vous donner des utilisations vraiment intéressantes pour les fragments? Des choses que Google n'a pas mentionnées dans leurs vidéos?
  2. Quel est le meilleur moyen de communiquer entre les fragments et les activités qui les contiennent?
  3. Quelles sont les choses les plus importantes à retenir lorsque vous utilisez des fragments? Des conseils et des avertissements de votre expérience?
439

# 1 & # 2 Quels sont les objectifs de l'utilisation d'un fragment et quels sont les avantages et les inconvénients de l'utilisation de fragments par rapport à l'utilisation d'activités/vues/mises en page?

Les fragments sont la solution d'Android pour créer des interfaces utilisateur réutilisables. Vous pouvez réaliser certaines des mêmes choses en utilisant des activités et des présentations (par exemple, en utilisant des inclus). Pourtant; des fragments sont connectés à l'API Android, à partir de HoneyComb et plus. Laissez-moi élaborer;

  • Le ActionBar. Si vous souhaitez que les onglets se déplacent dans votre application, vous remarquerez rapidement que l'interface ActionBar.TabListener vous donne un paramètre FragmentTransaction en tant qu'argument d'entrée de la méthode onTabSelected. Vous pouvez probablement ignorer cela, et faire autre chose et intelligemment, mais vous travailleriez contre l'API, pas avec.

  • La FragmentManager gère "le retour" de manière très intelligente. Retour ne signifie pas revenir à la dernière activité, comme pour les activités régulières. Cela signifie revenir à l'état de fragment précédent.

  • Vous pouvez utiliser le cool ViewPager avec un FragmentPagerAdapter pour créer des interfaces de balayage. Le code FragmentPagerAdapter est beaucoup plus propre qu'un adaptateur classique et contrôle l'instanciation des fragments individuels.

  • Votre vie sera beaucoup plus facile si vous utilisez Fragments lorsque vous essayez de créer des applications pour téléphones et tablettes. Étant donné que les fragments sont tellement liés aux API Honeycomb +, vous souhaiterez également les utiliser sur les téléphones pour réutiliser le code. C'est là que la bibliothèque de compatibilité est utile.

  • Vous pourriez même et devriez utiliser des fragments pour des applications destinées aux téléphones uniquement. Si vous avez la portabilité en tête. J'utilise ActionBarSherlock et les bibliothèques de compatibilité pour créer des applications "à la recherche d'ICS" identiques à celles de la version 1.6. Vous obtenez les dernières fonctionnalités comme la ActionBar, avec des onglets, un débordement, une barre d’action divisée, un viewpager, etc.

Bonus 2

Le meilleur moyen de communiquer entre les fragments sont les intentions. Lorsque vous appuyez sur quelque chose dans un fragment, vous appelez généralement StartActivity() avec des données. L'intention est transmise à tous les fragments de l'activité que vous lancez.

261
Glenn Bech

Vous ne savez pas de quelle vidéo (s) vous parlez, mais je doute qu'ils disent que vous devriez utiliser des fragments au lieu d'activités, car ils ne sont pas directement interchangeables. Il existe en fait un assez entrée détaillée dans le Guide de développement, pensez à le lire pour plus de détails.

En bref, les fragments vivent dans les activités et chaque activité peut héberger de nombreux fragments. Comme les activités, elles ont un cycle de vie spécifique, contrairement aux activités, ce ne sont pas des composants d’application de niveau supérieur. Les avantages des fragments incluent la réutilisation du code et la modularité (par exemple, en utilisant la même vue liste dans de nombreuses activités), y compris la possibilité de créer des interfaces à volets multiples (principalement utiles sur les tablettes). Le principal inconvénient est la complexité ajoutée (en partie). Vous pouvez généralement obtenir la même chose avec des vues (personnalisées) d’une manière non standard et moins robuste.

67
Nikolay Elenkov

Un fragment est un élément de l'interface utilisateur ou du comportement d'une application pouvant être placé dans une activité, ce qui permet une conception d'activité plus modulaire. Ce ne sera pas faux si nous disons qu'un fragment est une sorte de sous-activité.

Voici quelques points importants concernant un fragment:

  1. Un fragment a sa propre présentation et son propre comportement avec ses propres rappels de cycle de vie.

  2. Vous pouvez ajouter ou supprimer des fragments dans une activité lorsque celle-ci est en cours d'exécution.

  3. Vous pouvez combiner plusieurs fragments en une seule activité pour créer une interface utilisateur à volets multiples.

  4. Un fragment peut être utilisé dans plusieurs activités.

  5. Le cycle de vie d'un fragment est étroitement lié au cycle de vie de son activité hôte.

  6. Lorsque l'activité est suspendue, tous les fragments disponibles dans l'activité seront également arrêtés.

  7. Un fragment peut implémenter un comportement qui ne comporte aucun composant d'interface utilisateur.

  8. Des fragments ont été ajoutés à l'API Android dans Android (Honeycomb) avec la version 11 de l'API.

Pour plus de détails, visitez le site officiel, Fragments.

45
mani

C'est une information importante que j'ai trouvée sur des fragments:

Historiquement, chaque écran d'une application Android était implémenté en tant qu'activité distincte. Cela crée un défi pour la transmission d'informations entre les écrans car le mécanisme d'intention Android n'autorise pas le transfert d'un type de référence (c'est-à-dire un objet) directement entre les activités. Au lieu de cela, l'objet doit être sérialisé ou une référence accessible globalement doit être rendue disponible.

En faisant de chaque écran un fragment séparé, ce mal de tête lors du transfert de données est totalement évité. Les fragments existent toujours dans le contexte d'une activité donnée et peuvent toujours accéder à cette activité. En stockant les informations d'intérêt dans l'activité, le fragment de chaque écran peut simplement accéder à la référence de l'objet via l'activité.

Source: https://www.pluralsight.com/blog/software-development/Android-fragments

16
Kaveesh Kanwal

Les fragments sont particulièrement utiles dans certains cas, par exemple lorsque nous voulons conserver un tiroir de navigation dans toutes nos pages. Vous pouvez gonfler une structure de cadre avec le fragment de votre choix tout en ayant accès au tiroir de navigation.

Si vous aviez utilisé une activité, vous auriez dû garder le tiroir dans toutes les activités, ce qui créerait un code redondant. C'est une utilisation intéressante d'un fragment.

Je suis nouveau sur Android et je pense toujours qu'un fragment est utile de cette façon.

7
Nithin Baby

Les activités sont les composants plein écran de l'application avec la barre d'outils, tout le reste étant de préférence des fragments. Une activité parent en plein écran avec une barre d’outils peut avoir plusieurs volets, pages défilables, boîtes de dialogue, etc. (tous les fragments), tous accessibles depuis le parent et communiquant via le parent.

Exemple:

Activité A, Activité B, Activité C:

  • Le même code doit être répété pour toutes les activités, par exemple pour afficher une barre d'outils de base, ou hériter d'une activité parent (devient difficile à gérer).
  • Pour passer d’une activité à l’autre, il faut que tous soient en mémoire (surcharge) ou qu’une soit détruite pour que l’autre puisse s’ouvrir.
  • La communication entre les activités peut se faire via Intents.

contre

Activité A, Fragment 1, Fragment 2, Fragment 3:

  • Pas de répétition de code, tous les écrans ont des barres d'outils, etc. issues de cette activité.
  • Plusieurs façons de passer d’un fragment à l’autre - pager de vue, volet multiple, etc.
  • L'activité contient la plupart des données, donc une communication minimale entre les fragments est nécessaire. Si nécessaire, peut être effectué facilement via des interfaces.
  • Les fragments n’ont pas besoin d’être en plein écran, il leur faut beaucoup de souplesse pour les concevoir.
  • Les fragments ne doivent pas être gonflés si les vues ne sont pas nécessaires.
  • Plusieurs activités peuvent utiliser le même fragment.

Je sais que cela a déjà été discuté à mort, mais je voudrais ajouter quelques points supplémentaires:

  • Les fragments peuvent être utilisés pour peupler Menus et peuvent gérer les MenuItem clics par eux-mêmes. Donnant ainsi d'autres options de modulation à vos activités. Vous pouvez effectuer des tâches dans ContextualActionBar et ainsi de suite sans que votre activité ne le sache et peut les découpler des tâches de base traitées par votre activité (Navigation/Paramètres/À propos de).

  • Un parent Frag avec enfant Frags peut vous donner d'autres options pour moduler vos composants. Par exemple. vous pouvez facilement échanger Frags, mettre de nouveaux Frags dans un pageur ou les supprimer, les réorganiser. Tout cela sans que votre activité ne sache quoi que ce soit à son sujet en se concentrant uniquement sur les activités de niveau supérieur.

4
einschnaehkeee

Un fragment vit dans une activité.

Tandis qu'une activité vit sur elle-même.

0
superkytoz

Les fragments vivent dans l'activité et ont:

  • son propre cycle de vie
  • sa propre mise en page
  • ses propres fragments d'enfants et etc.

Considérez les fragments comme une sous-activité de l'activité principale à laquelle il appartient. Ils ne peuvent pas exister par eux-mêmes et ils peuvent être appelés/réutilisés encore et encore. J'espère que cela t'aides :)

0
maniix

1.Le but d'utiliser un fragment?

  • Ans:
    1. Traitement des différences de facteur de forme.
    2. Passer des informations entre les écrans de l'application.
    3. Organisation de l'interface utilisateur.
    4. Métaphores de l'interface utilisateur avancée.
0
Prithiv Dharmaraj