web-dev-qa-db-fra.com

Une activité et tous les autres fragments

Je songe à implémenter un écran avec Activity et tous les autres écrans avec Fragments et managing all the fragments thru the activity.

Est-ce une bonne idée? et ma réponse est NON mais je veux tout de même savoir plus clairement à propos de cette pensée.

Quels sont les avantages et les inconvénients de cette idée?

Note:

S'il vous plaît ne me donnez pas le lien pour fragment et activité.

EDIT:

Voici quelque chose sur les fragments et l'activité:

Avantages:

  1. Les fragments sont destinés à être utilisés avec des activités en tant que sous-activité.
  2. Les fragments ne remplacent pas les activités.
  3. Les fragments sont destinés à être réutilisés (besoin de savoir de quelle manière la réutilisabilité peut être obtenue.).
  4. Les fragments sont le meilleur moyen d'écrire du code pour prendre en charge les tablettes et les téléphones.

inconvénients:

  1. Nous devons implémenter l'interface pour extraire les données des fragments.
  2. Pour dialoguer, nous devons aller très loin pour le montrer.

Pourquoi devrions-nous utiliser des fragments si nous n'envisageons pas de comprimés? Quelle est la différence de temps de départ entre activité et fragment?

157
Vineet Shukla

Cela dépend de l'application que vous créez. J'ai créé plusieurs applications en utilisant les deux approches et je ne peux pas dire qu'une façon est toujours meilleure que l'autre. La dernière application que j'ai créée, j’utilisais l’approche unique Activity et une navigation de style Facebook. Lors de la sélection d'éléments dans la liste de navigation, je mets à jour un seul conteneur Fragment afin d'afficher cette section.

Cela dit, avoir un seul Activity introduit également beaucoup de complexités. Supposons que vous ayez un formulaire de modification et que, pour certains des éléments que l'utilisateur doit sélectionner ou créer, il soit obligé d'accéder à un nouvel écran. Avec les activités, nous appelions simplement le nouvel écran avec startActivityForResult, mais avec Fragments, il n’existait rien de tel que vous finissiez par stocker la valeur sur le Activity et par la modification principale. fragment vérifie le Activity pour voir si les données ont été sélectionnées et doivent être affichées à l'utilisateur.

Ce que Aravind dit à propos de rester collé à un seul type Activity est également vrai, mais pas vraiment limitant. Votre activité serait une FragmentActivity et tant que vous n'avez pas besoin d'un MapView, il n'y a pas de réelle limitation. Toutefois, si vous souhaitez afficher des cartes, vous pouvez le faire, mais vous devez modifier la bibliothèque de compatibilité Android pour que FragmentActivity s'étend MapActivity. ou utilisez le le disponible publiquement Android-support-v4-googlemaps .

En fin de compte, la plupart des développeurs que je connais qui ont emprunté la route Activity sont retournés à plusieurs activités pour simplifier leur code. Sur le plan de l’interface utilisateur, sur une tablette, vous êtes parfois bloqué avec un seul Activity juste pour réaliser l’interaction la plus folle que vos concepteurs proposent :)

-- MODIFIER --

Google a finalement publié MapFragment dans la bibliothèque de compatibilité afin que vous n'ayez plus à utiliser le hack Android-support-v4-googlemaps. Lisez à propos de la mise à jour ici: Google Maps Android API v2

- EDIT 2 -

Je viens de lire ce billet sur l’état moderne (2017) des fragments et je me suis souvenu de cette réponse ancienne. Je pensais partager: Fragments: la solution à tous les problèmes d’Android

91
JustinMorris

Je suis sur le point de terminer un projet (5 mois en développement), qui compte 1 activité et 17 fragments, tous en plein écran. Ceci est mon deuxième projet basé sur un fragment (le précédent était de 4 mois).

Pros

  • L’activité principale est de 700 lignes de code, gérant bien l’ordre de navigation des fragments.
  • Chaque fragment est bien séparé dans sa propre classe et est relativement petit (~ quelques centaines de lignes de matériel d'interface utilisateur).
  • La direction peut dire "hé, pourquoi ne pas changer l'ordre d'affichage de ces écrans", et je peux le faire très facilement, car ces fragments ne dépendent pas les uns des autres, ils communiquent tous au cours de l'activité. Je n'ai pas à creuser des activités individuelles pour trouver où ils s'appellent.
  • mon application est très chargée en graphismes et ne fonctionnerait jamais comme une activité d'écran 1. Toutes ces sous-activités dans la mémoire obligeraient l'application à manquer de mémoire tout le temps; je devrais donc finish() toutes les activités non visibles et créer la même logique de contrôle pour la navigation que je le ferais. avec des fragments. Autant le faire avec des fragments juste à cause de cela.
  • si nous réalisons une application pour tablette, nous aurons plus de facilité à reconfigurer les éléments, car tout est déjà bien séparé.

Cons

  • vous devez apprendre à utiliser des fragments
83
Tamas

Tout d’abord, quoi que vous fassiez, assurez-vous d’avoir une conception modulaire utilisant un modèle, une vue, un présentateur qui ne dépend pas beaucoup d’une activité ou d’un fragment.

Que fournissent vraiment les activités et les fragments?

  1. Cycle de vie et backstack
  2. Contexte et ressources

Par conséquent, utilisez-les pour cela, SEULEMENT . Ils ont assez de responsabilités, ne les compliquez pas trop. Je dirais que même initier une TextView dans une activité ou un fragment est une mauvaise pratique. Il existe une raison pour laquelle les méthodes telles que Vue publique findViewById (int id) sont PUBLIC .

Maintenant, la question devient plus simple: ai-je besoin de plusieurs événements de cycle de vie et backstacks indépendants? Si vous pensez peut-être, utilisez des fragments. Si vous pensez ne jamais, n'utilisez pas de fragments.

À la fin, vous pourriez créer votre propre pile de pile et votre propre cycle de vie. Mais pourquoi recréer la roue?

EDIT: Pourquoi voter à la baisse? Les gens à but unique Chaque activité ou fragment doit pouvoir instancier un présentateur qui instancie une vue. Le présentateur et la vue constituent un module pouvant être interchangé. Pourquoi une activité ou un fragment devrait-il avoir la responsabilité d'un présentateur?

16
beplaya

Avantages

Vous pouvez contrôler vos fragments à partir d'une seule activité, car tous les fragments sont indépendants les uns des autres. Les fragments ont un cycle de vie (onPause, onCreate, onStart...). En ayant un cycle de vie, les fragments peuvent réagir indépendamment aux événements, enregistrer leur état via onSaveInstanceState et être restaurés (par exemple, lors d’une reprise après un appel entrant ou lorsque l’utilisateur clique sur le bouton Précédent).

Les inconvénients

  1. Créer de la complexité dans votre code d'activité.
  2. Vous devez gérer l'ordre des fragments.

Néanmoins, c'est une très bonne idée, comme si vous deviez créer une application, pour laquelle vous souhaitez afficher plusieurs vues. Grâce à cette idée, vous pourrez voir plusieurs fragments dans une seule vue.

12
Sahil Mahajan Mj

Cela dépend de la conception de votre application. Supposons que si vous utilisez des onglets dans ActionBar dans l'agencement de conception, dans l'activité unique de l'application, des fragments peuvent être modifiés en un clic. Alors maintenant, vous avez une activité et supposez trois onglets dans la barre d’action et la vue des onglets fournis par les fragments, ce qui facilite la gestion de plus est également réalisable. Tout dépend donc du schéma de conception de votre application et de la manière dont vous prenez la décision de construire pour elle.

2
ASH

Avantages:

  • Peut être utilisé pour créer une interface unique utilisable par plusieurs tailles d'écran et orientations via des présentations XML.

Les inconvénients:

  • Nécessite un code plus complexe dans votre activité.

Je pense que c'est une bonne idée, car utiliser différentes dispositions xml en fonction de la taille et de l'orientation actuelles de l'écran peut rendre l'application plus utilisable et réduire le besoin de publier plusieurs versions de votre application si vous envisagez de le faire pour les téléphones et les tablettes. Si votre application ne sera jamais utilisée par les tablettes et les téléphones, cela ne vaut probablement pas la peine.

1
Ski

Je suis partisan du report de tous les points de vue sur l'inflation en fragments pour offrir une meilleure flexibilité. Par exemple, avoir une seule activité d'atterrissage pour une tablette qui regroupe plusieurs fragments et réutiliser les mêmes fragments sur un téléphone pour afficher un écran par fragment. Cependant, dans la mise en œuvre du téléphone, j'aurais une activité distincte pour chaque écran. Les activités n’auraient pas trop de code car elles se remettraient immédiatement à leur homologue fragmentée pour voir l’inflation.

Je pense que c'est une mauvaise idée pour la mise en œuvre du téléphone de devoir passer à une activité d'atterrissage unique lorsque des onglets ou un menu coulissant sont introduits, car la navigation dans les onglets ou les menus donne simplement lieu à un nouvel écran.

0
user1679130