android exemple - Dilemme: quand utiliser Fragments vs Activités:




7 Answers

Les experts vous diront: "Quand je verrai l'IU, je saurai s'il faut utiliser une Activity ou un Fragment ". Au début, cela n'aura aucun sens, mais avec le temps, vous serez en mesure de dire si vous avez besoin de Fragment ou non.

Il y a une bonne pratique que j'ai trouvée très utile pour moi. Cela m'est venu à l'esprit alors que j'essayais d'expliquer quelque chose à ma fille.

À savoir, imaginez une boîte qui représente un écran. Pouvez-vous charger un autre écran dans cette case? Si vous utilisez une nouvelle boîte, devrez-vous copier plusieurs éléments de la première case? Si la réponse est Oui, alors vous devriez utiliser Fragments , car l' Activity racine peut contenir tous les éléments dupliqués pour vous faire gagner du temps en les créant, et vous pouvez simplement remplacer des parties de la boîte.

Mais n'oubliez pas que vous avez toujours besoin d'un conteneur ( Activity ) ou que vos pièces seront dispersées. Donc une boîte avec des pièces à l'intérieur.

Veillez à ne pas abuser de la boîte. Les experts Android UX conseillent (vous pouvez les trouver sur YouTube) quand nous devrions charger explicitement une autre Activity , au lieu d'utiliser un Fragment (comme quand nous traitons avec le tiroir de navigation qui a des catégories). Une fois que vous vous sentez à l'aise avec Fragments , vous pouvez regarder toutes leurs vidéos. Encore plus, ils sont obligatoires.

Pouvez-vous maintenant regarder votre interface utilisateur et déterminer si vous avez besoin d'une Activity ou d'un Fragment ? Avez-vous eu une nouvelle perspective? Je pense que tu l'as fait.

example open

Je sais que les Activities sont conçues pour représenter un seul écran de mon application, tandis que les Fragments sont conçus pour être des mises en page UI réutilisables avec une logique intégrée à l'intérieur d'eux.

Il n'y a pas si longtemps, j'ai développé une application qui disait qu'ils devaient être développés. J'ai créé une Activity pour représenter un écran de mon application et utilisé des fragments pour ViewPager ou Google Maps . J'ai rarement créé un ListFragment ou une autre interface utilisateur qui peut être réutilisée plusieurs fois.

Récemment, je suis tombé sur un projet qui contient seulement 2 Activities une est une SettingsActivity et l'autre est MainActivity . La disposition de MainActivity est remplie avec de nombreux fragments d'interface utilisateur cachés en plein écran et un seul est affiché. Dans la logique Acitivty il y a beaucoup de FragmentTransitions entre les différents écrans de l'application.

Ce que j'ai aimé de cette approche est que, parce que l'application utilise un ActionBar , elle reste intacte et ne bouge pas avec l'animation de commutation d'écran, ce qui est le cas avec le changement d' Activity . Cela donne une sensation plus fluide à ces transitions d'écran.

Donc je suppose que ce que je demande est de partager votre mode de développement actuel sur ce sujet, je sais que ça pourrait ressembler à une question basée sur l'opinion au premier abord mais je la considère comme une question de design et d'architecture Android ... basé sur l'opinion.

MISE À JOUR (01.05.2014): Suite à cette présentation par Eric Burke de Square , (que je dois dire est une excellente présentation avec beaucoup d'outils utiles pour les développeurs Android. Et je ne suis pas du tout lié à Square)

http://www.infoq.com/presentations/Android-Design/

De mon expérience personnelle au cours des derniers mois, j'ai trouvé que la meilleure façon de construire mes applications est de créer des groupes de fragments qui viennent représenter un flux dans l'application et présenter tous ces fragments en une seule Activity . Donc, fondamentalement, vous aurez le même nombre d' Activities dans votre application que le nombre de flux. De cette façon, la barre d'action reste intacte sur tous les écrans du flux, mais elle est recréée en changeant un flux qui a beaucoup de sens. Comme l'affirme Eric Burke et comme je me suis rendu compte également, la philosophie consistant à utiliser le moins d' Activities possibles n'est pas applicable à toutes les situations car cela crée un désordre dans ce qu'il appelle l'activité «Dieu».




Eh bien, d'après les conférences de Google (peut-être here , je ne me souviens pas), vous devriez envisager d'utiliser Fragments chaque fois que c'est possible, car cela rend votre code plus facile à maintenir et à contrôler.

Cependant, je pense que dans certains cas cela peut devenir trop complexe, car l'activité qui héberge les fragments doit naviguer / communiquer entre eux.

Je pense que vous devriez décider par vous-même ce qui est le mieux pour vous. Il n'est généralement pas difficile de convertir une activité en fragment et vice versa.

J'ai créé un post à propos de ce dillema here , si vous voulez en lire plus.




Il y a plus à cela que vous ne le pensez, vous devez vous rappeler qu'une activité qui est lancée ne détruit pas implicitement l'activité d'appel. Bien sûr, vous pouvez le configurer de sorte que votre utilisateur clique sur un bouton pour aller à une page, vous démarrez l'activité de cette page et détruisez l'actuelle. Cela provoque beaucoup de frais généraux. Le meilleur guide que je peux vous donner est:

** Commencer une nouvelle activité seulement s'il est logique d'avoir l'activité principale et celle-ci ouverte en même temps (pensez à plusieurs fenêtres).

Google Drive est un bon exemple de cas où il est judicieux d'avoir plusieurs activités. L'activité principale fournit un explorateur de fichiers. Lorsqu'un fichier est ouvert, une nouvelle activité est lancée pour afficher ce fichier. Vous pouvez appuyer sur le bouton des applications récentes qui vous permettra de revenir au navigateur sans fermer le document ouvert, puis peut-être même ouvrir un autre document en parallèle au premier.




N'oubliez pas qu'une activité est le bloc / composant de l'application qui peut être partagé et démarré par Intent! Ainsi, chaque activité de votre application ne devrait résoudre qu'un seul type de tâche. Si vous n'avez qu'une seule tâche dans votre application, je pense que vous n'avez besoin que d'une activité et de plusieurs fragments si nécessaire. Bien sûr, vous pouvez réutiliser des fragments dans des activités futures qui résolvent d'autres tâches. Cette approche sera une séparation claire et logique des tâches. Et vous n'avez pas besoin de maintenir une activité avec des paramètres de filtre d'intention différents pour différents ensembles de fragments. Vous définissez les tâches à l'étape de conception du processus de développement en fonction des besoins.




Le gros avantage d'un fragment sur l'activité est que le code qui est utilisé pour le fragment peut être utilisé pour différentes activités. De plus, il fournit une réutilisation du code dans le développement de l'application.




Cela dépend de ce que vous voulez vraiment construire. Par exemple, le navigation drawer utilise des fragments. Les onglets utilisent aussi des fragments . Une autre bonne mise en œuvre, est l'endroit où vous avez une listview . Lorsque vous faites pivoter le téléphone et cliquez sur une ligne, l'activité est affichée dans la moitié restante de l'écran. Personnellement, j'utilise des fragments et fragment dialogs , car ils sont plus professionnels. De plus, ils sont manipulés plus facilement en rotation.




Vous êtes libre d'en utiliser un.
Fondamentalement, vous devez évaluer quel est le meilleur pour votre application. Réfléchissez à la façon dont vous allez gérer le flux métier et comment stocker / gérer les préférences de données.

Pensez à la façon dont les fragments stockent les données sur les déchets. Lorsque vous implémentez le fragment, vous avez une racine d'activité à remplir avec le (s) fragment (s). Donc, si vous essayez de mettre en œuvre beaucoup d'activités avec trop de fragments, vous devez considérer la performance sur votre application, parce que vous manipulez (parle grossièrement) deux cycle de vie du contexte, n'oubliez pas la complexité.

Rappelez-vous: devrais-je utiliser des fragments? Pourquoi ne devrais-je pas?

Cordialement.




Related

android android-fragments android-activity architecture