TP Fragments
Première partie : création statique de fragments
Reprendre le projet de prise en main d'Android en en faisant une copie
Le transformer pour qu'il soit maintenant composé d'une seule Activity
elle va utiliser deux fragments :
un fragment pour l'interface de saisie des caractéristiques de l'utilisateur
un fragment pour l'affichage de ces caractéristiques
on aura trois classes java dans trois fichiers différents :
MainActivity dans MainActivity.java
MainFragment dans MainFragment.java
DisplayFragment dans DisplayFragment.java
ainsi que trois fichiers de description d'IHM
activity_main.xml : minimal
fragment_main.xml : contiendra l'IHM de la saisie des caractéristiques de l'utilisateur
fragment_display.xml : contiendra l'IHM d'affichage de ces coordonnées
Faire communiquer les deux fragments
gérer l'interaction de demande d'affichage via l'ajout d'un listener sur le bouton dans le code java de MainFragment.java
dans onCreateView, récupérer le bouton en le cherchant dans la vue du fragment :
Button buttonActionDisplay = (Button)rootView.findViewById (R.id.button) ;
déclarer une interface OnDisplayFragmentListener que MainActivity devra implémenter
cette interface déclarera une méthode : public void onDisplayFragment (View view) ;
déclarer un attribut de MainFragment du type de cette interface
protected OnDisplayFragmentListener odfl ;
dans onAttach, initialiser cet attribut à partir de l'Activity responsable du Fragment
odfl = (OnDisplayFragmentListener)activity ;
dans la méthode onClick du listener associé au bouton, déléguer le traitement de l'interaction à cet attribut, c'est-à-dire à l'Activity
odfl.onDisplayFragment (view) ;
dans MainActivity.java, déclarer que MainActivity implémente l'interface MainFragment.OnDisplayFragmentListener
implémenter la méthode public void onDisplayFragment (View view) et y gérer la communication avec le second fragment
le fragment DisplayFragment devra réaliser l'affichage des caractéristiques utilisateur
il devra exposer des méthodes permettant de mettre à jour ces caractéristiques
ces méthodes devront réaliser des mises à jour de cette forme :
TextView tvDisplayNom = (TextView)getView ().findViewById (R.id.textViewDisplayNom) ;
Configurer statiquement ces deux fragments :
pour qu'ils apparaissent :
l'un à côté de l'autre quand l'appareil Android se trouve en mode paysage
l'un en dessous de l'autre quand l'appareil Android se trouve en mode portrait
définir pour cela un Layout XML dans chacun des répertoires qu'il faudra créer :
layout-land
layout-port
Seconde partie : création dynamique de fragments
Reprendre le projet Android précédent en en faisant une copie
Dans activity_main.xml, définir le Layout XML de façon à ce qu'il ne contienne aucun fragment
Faire en sorte que le fragment principal MainFragment apparaisse à la création de MainActivity
Dans MainActivity.java, ajouter dynamiquement le premier fragment à la fin de la méthode onCreate
mf = new MainFragment () ;
getSupportFragmentManager ().beginTransaction ().add (R.id.fragmentContainer, mf).commit () ;
Remplacer le premier fragment par le second suite au clic sur le bouton de validation / de demande d'affichage
bien prévoir la possibilité de revenir en arrière avant de procéder à la suppression du fragment principal
DisplayFragment df = new DisplayFragment () ;
...
getSupportFragmentManager ().beginTransaction ()
.remove (mf)
.addToBackStack (null)
.add (R.id.fragmentContainer, df)
.commit () ;