Android - J'ai besoin de quelques éclaircissements sur les fragments par rapport aux activités et aux vues


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

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

Quel est le but des fragments et de leurs utilisations possibles (autres que certains exemples d'interface utilisateur qui peuvent facilement être obtenus par des vues / mises en page simples)?

Ma question concerne les fragments:

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

Questions bonus

  1. Pouvez-vous donner des utilisations vraiment intéressantes pour les fragments? Des choses que Google n'a pas mentionné dans leurs vidéos?
  2. Quelle est la meilleure façon 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?

Answers


# 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 obtenir certaines des mêmes choses en utilisant des activités et des mises en page (par exemple en utilisant des inclusions). Toutefois; Les fragments sont connectés à l'API Android, à partir de HoneyComb, et jusqu'à. Laissez-moi élaborer;

  • Le ActionBar . Si vous voulez des onglets là-haut pour naviguer dans votre application, vous voyez rapidement que l'interface ActionBar.TabListener vous donne un FragmentTransaction tant qu'argument d'entrée de la méthode onTabSelected . Vous pourriez probablement ignorer ceci, et faire quelque chose d'autre et intelligent, mais vous seriez travailler contre l'API, pas avec elle.

  • Le FragmentManager gère «back» pour vous d'une 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 du fragment précédent.

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

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

  • Vous pouvez même et devez utiliser des fragments pour les applications destinées uniquement aux téléphones. Si vous avez la portabilité à l'esprit. J'utilise ActionBarSherlock et les bibliothèques de compatibilité pour créer des applications "regardant ICS", qui ont la même apparence depuis la version 1.6. Vous obtenez les dernières fonctionnalités telles que ActionBar , avec des onglets, un débordement, une barre d'action partagée, un viewpager, etc.

Bonus 2

La meilleure façon 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 dessus. L'intention est transmise à tous les fragments de l'activité que vous lancez.




  1. Le fragment fait partie d'une activité, qui apporte sa propre interface à cette activité. Le fragment peut être pensé comme une sous-activité. Où comme l'écran complet avec lequel l'utilisateur interagit est appelé comme activité. Une activité peut contenir plusieurs fragments. Les fragments sont principalement une sous-partie d'une activité.

  2. Une activité peut contenir 0 ou plusieurs nombre de fragments en fonction de la taille de l'écran. Un fragment peut être réutilisé dans plusieurs activités, de sorte qu'il agit comme un composant réutilisable dans les activités.

  3. Un fragment ne peut pas exister indépendamment. Cela devrait toujours faire partie d'une activité. Où l'activité peut exister sans aucun fragment dedans.




Je ne sais pas à quelle (s) vidéo (s) vous parlez, mais je doute qu'ils disent que vous devriez utiliser des fragments plutôt que des activités, car ils ne sont pas directement interchangeables. Il y a en fait une entrée assez détaillée dans le Guide de développement, pensez à le lire pour plus de détails.

En bref, les fragments vivent à l'intérieur des 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 applicatifs de haut niveau. Les avantages des fragments incluent la réutilisation du code et la modularité (par exemple, en utilisant la même vue de liste dans de nombreuses activités), y compris la possibilité de construire des interfaces à plusieurs volets (principalement utiles sur les tablettes). Le principal inconvénient est (un peu) la complexité ajoutée. Vous pouvez généralement obtenir la même chose avec des vues (personnalisées) de manière non standard et moins robuste.




Un fragment est une partie de l'interface utilisateur ou du comportement d'une application qui peut être placée dans une activité 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 les points importants sur un fragment:

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

  2. Vous pouvez ajouter ou supprimer des fragments dans une activité pendant l'exécution de l'activité.

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

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

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

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

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

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

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




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

Historiquement, chaque écran d'une application Android a été implémenté en tant qu'activité distincte. Cela crée un défi lors de la transmission d'informations entre les écrans car le mécanisme Android Intent ne permet pas de passer un type de référence (par exemple, un objet) directement entre Activités. Au lieu de cela, l'objet doit être sérialisé ou une référence globalement accessible doit être disponible.

En faisant de chaque écran un fragment séparé, cette fuite de données est complètement évitée. 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 pour chaque écran peut simplement accéder à la référence d'objet via l'activité.




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 disposition d'image avec le fragment que vous voulez et avoir toujours accès au tiroir de navigation.

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

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




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

  • Frags peut être utilisé pour peupler les Menu et peut gérer les clics MenuItem eux-mêmes. Ainsi donnant plus de possibilités de modulation pour vos activités. Vous pouvez faire des choses ContextualActionBar et ainsi de suite sans que votre activité ne le sache et vous pouvez essentiellement le découpler des choses de base que votre activité gère (Navigation / Paramètres / À propos de).

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




Un fragment vit à l'intérieur d'une activité.

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




Fragments vit dans l'activité et a:

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

Pensez à Fragments comme une sous-activité de l'activité principale à laquelle il appartient, il ne peut pas exister de lui-même et il peut être appelé / réutilisé encore et encore. J'espère que cela t'aides :)




1. Quels sont les objectifs de l'utilisation d'un fragment?

  • Ans:
    1. Traiter les différences de facteur de forme de l'appareil.
    2. Passer des informations entre les écrans d'application
    3. Organisation de l'interface utilisateur
    4. Métaphores avancées de l'interface utilisateur.