J'essaie de comprendre comment utiliser les Fragments pour créer des applications qui s'adaptent bien à plusieurs écrans et mises en page. J'ai étudié quelques exemples :
- Les Fragments sur le guide du développeur Android.
- Application Google IO
- Échantillon de fragments de ActionBar Sherlock .
Tous ces éléments plaident en faveur d'une Activity
l'approche :
- Sur un grand écran, afficher un seul
Activity
avec plusieursFragment
s - Sur un écran plus petit, divisez le
Fragment
entre plusieursActivity
s.
J'ai pensé à une autre approche - une seule Activity
un :
- Avoir un seul
Activity
avec tous lesFragment
en son sein. - En fonction de la taille et de l'orientation de l'écran, affichez/masquez l'image appropriée.
Fragment
(s) (en utilisantFragmentTransaction.show()
/FragmentTransaction.hide()
) .
Prenons le même exemple de "liste d'articles d'actualité/contenu d'articles" que celui utilisé dans le guide du développeur d'Android :
- Avoir le
News
activité contenant à la fois unArticleListFragment
etArticleReaderFragment
. - Dans un onglet, les deux fragments sont toujours affichés.
- Sur un téléphone, la touche
ArticleReaderFragment
est initialement caché. Lorsqu'un article est sélectionné dans la liste, l'icôneArticleListFragment
est caché et leArticleReaderFragment
est affichée.
Quelqu'un a-t-il utilisé une approche similaire ? Y a-t-il des inconvénients pratiques à cette méthode ? Semble-t-elle meilleure/moins bonne par rapport à la méthode des activités multiples ? Par exemple, les fragments ne peuvent pas être affichés/cachés en XML - une seule activité est nécessaire. doit utiliser FragmentTransaction
pour cela.
EDIT 1 : Description d'un scénario hypothétique
Imaginez une application capable d'afficher jusqu'à trois "volets" à la fois sur l'écran. En outre, voici les facteurs à prendre en considération :
- Un téléphone ne peut afficher qu'un seul volet à la fois (indépendamment de l'orientation portrait/paysage).
- Une tablette de 7 pouces peut afficher deux volets, divisés verticalement en mode portrait et horizontalement en mode paysage.
- Une tablette de plus de 10 pouces peut afficher 2 volets, divisés verticalement en mode portrait ; 3 volets divisés horizontalement en mode paysage.
Pour des raisons de simplicité, ne parlons pas des écrans de télévision.
Maintenant, traduisons cela en termes de conception :
- Nous avons trois fragments : Frag1, Frag2 et Frag3.
- Dans le cas le plus simple, les trois fragments se trouvent dans une seule activité (appelée ActivitéA). Il s'agit du cas du paysage de 10 pouces.
- L'autre cas "simple" est celui où chaque fragment se trouve dans sa propre activité - l'activité A contient le fragment 1 ; l'activité B contient le fragment 2 et l'activité C contient le fragment 3.
Jusqu'à présent, nous n'avons rien envisagé qui soit significativement différent de l'exemple du lecteur de nouvelles présenté dans le guide du développeur Android. La seule différence majeure est d'avoir trois fragments au lieu de deux.
Maintenant, le cas des onglets de 7 pouces qui ne peuvent accueillir que 2 fragments. Comment cela fonctionne-t-il ? Notez qu'il y a deux combinaisons possibles ici :
- Frag1 et Frag2 sont affichés.
- Frag2 et Frag3 sont affichés.
Je n'arrive pas à m'y retrouver. Dois-je faire tout cela dans ActivityA ? Dois-je créer une toute nouvelle activitéD ? Combien de layouts devrais-je créer (j'en ai compté environ 8) ? N'y a-t-il pas trop de permutations ?
Je me rends compte que l'approche à activité unique que j'ai proposée plus haut n'est peut-être pas adaptée à ce scénario, étant donné que l'affichage et le masquage des fragments ne sont pas triviaux en soi.
Avez-vous des suggestions sur la manière de gérer cela sans être submergé par les mises en page et les combinaisons ?