TP Fragments

Première partie : création statique de fragments

  1. Reprendre le projet de prise en main d'Android en en faisant une copie

  2. 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

  3. 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) ;

  4. 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

  1. Reprendre le projet Android précédent en en faisant une copie

  2. Dans activity_main.xml, définir le Layout XML de façon à ce qu'il ne contienne aucun fragment

  3. 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 () ;

  4. 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 () ;