SlideShare une entreprise Scribd logo
LES FRAGMENTS
2017-2018
© Imene Sghaier
ISET Nabeul
SEM3
2
 Objectifs spécifiques
 Se familiariser avec la manipulation des fragments
 Eléments de contenu
• Introduction
• Définition et propriétés
• Structure d’un fragment
• Types de fragments
• Cycle de vie d’un fragment
• La méthode onCreateView et autres méthodes
• Fragment statique
• Création d’un fragment
• Création de l'activité qui va accueillir le Fragment
• Positionner les fragments
• Fragments dynamiques
• Interaction entre activity et fragments
 Volume Horaire :
 Cours : 1.5 heure
OBJECTIFS ET ÉLÉMENTS DE CONTENU
Imene Sghaier-Développement Mobile Avancé
INTRODUCTION
 Pour s'adapter à toutes les tailles d'écrans. Il suffit de
mettre un layout particulier dans layout-small, layout-
normal, layout-large, layout-xlarge, pour obtenir l'I.H.M.
souhaitée en fonction des caractéristiques de l'écran.
 Toutefois, l'activité qui contrôle tous ces cas deviendra
très complexe
 Ceci a motivé à créer les fragments ;
Imene Sghaier-Développement Mobile Avancé
3
4
• Introduction
• Définition et propriétés
• Structure d’un fragment
• Types de fragments
• Cycle de vie d’un fragment
• La méthode onCreateView et autres méthodes
• Fragment statique
• Création d’un fragment
• Création de l'activité qui va accueillir le Fragment
• Positionner les fragments
• Fragments dynamiques
• Interaction entre activité et fragments
PLAN DU CHAPITRE
Imene Sghaier-Développement Mobile Avancé
DÉFINITION ET PROPRIÉTÉS
 Un fragment est un sous-contrôleur d’une activité,
contenant une vue ainsi que son propre cycle de vie,
capable d’être ajouté/retiré/déplacé d’une activité
 Les fragments permettent de sectionner vos activités
en composants encapsulés et réutilisables qui
possèdent leur propre cycle de vie et leur propre
interface graphique. Cela permet de mettre en place
des I.H.M évoluées qui s'adaptent aux différents
écrans et à leur orientation tout en maintenant le code
de l'activité « human readable ».
 Ainsi, dans l'exemple ci-dessous (celui de Google),
nous voyons comment l'activité A s'adapte en fonction
de la taille de l'écran.
Imene Sghaier-Développement Mobile Avancé
5
DÉFINITION ET PROPRIÉTÉS
 Les fragments déportent une partie du traitement de l'activité en leur
sein ;
 Les fragments sont liés à une activité (ils n'existent pas sans elle) ;
 Les fragments définissent la plupart du temps une interface graphique,
mais peuvent aussi être utilisés pour retenir un état lors de la
destruction/reconstruction de leur activité parente (le bon vieux
onRetainNonConfigurationInstance) ;
 Les fragments peuvent être statiques (définis une fois pour toutes
dans le fichier de layout) ou dynamiques (créés, supprimés, ajoutés
dynamiquement) ;
 Les fragments sont apparus à partir de HoneyComb (level 11) ainsi,
pour les mettre en place avant HoneyComb, il faut utiliser la support-
librairy ;
 Pour les utiliser, il faut un BuildSDK et un TragetSDK supérieur à 11.
 Les classes fondamentales pour la gestion des fragments
sont : Fragment, FragmentManager et FragmentTransaction.
Imene Sghaier-Développement Mobile Avancé
6
7
• Introduction
• Définition et propriétés
• Structure d’un fragment
• Types de fragments
• Cycle de vie d’un fragment
• La méthode onCreateView et autres méthodes
• Fragment statique
• Création d’un fragment
• Création de l'activité qui va accueillir le Fragment
• Positionner les fragments
• Fragments dynamiques
• Interaction entre activité et fragments
PLAN DU CHAPITRE
Imene Sghaier-Développement Mobile Avancé
STRUCTURE D’UN FRAGMENT
 Un fragment est une activité très simplifiée. C’est
seulement un arbre de vue défini par un layout, et
des écouteurs. Un fragment minimal possède cette
structure:
8
Imene Sghaier-Développement Mobile Avancé
9
• Introduction
• Définition et propriétés
• Structure d’un fragment
• Types de fragments
• Cycle de vie d’un fragment
• La méthode onCreateView et autres méthodes
• Fragment statique
• Création d’un fragment
• Création de l'activité qui va accueillir le Fragment
• Positionner les fragments
• Fragments dynamiques
• Interaction entre activité et fragments
PLAN DU CHAPITRE
Imene Sghaier-Développement Mobile Avancé
TYPES DE FRAGMENTS
 Il existe différents types de fragments, voici
quelques uns :
 ListFragment pour afficher une liste d’items,
comme le ferait une ListActivity.
 DialogFragment pour afficher un fragment dans
une fenêtre flottante au dessus d’une activité.
 PreferenceFragment pour gérer les préférences.
En commun : il faut surcharger la méthode
onCreateView qui définit leur contenu.
10
Imene Sghaier-Développement Mobile Avancé
11
• Introduction
• Définition et propriétés
• Structure d’un fragment
• Types de fragments
• Cycle de vie d’un fragment
• La méthode onCreateView et autres méthodes
• Fragment statique
• Création d’un fragment
• Création de l'activité qui va accueillir le Fragment
• Positionner les fragments
• Fragments dynamiques
• Interaction entre activité et fragments
PLAN DU CHAPITRE
Imene Sghaier-Développement Mobile Avancé
CYCLE DE VIE D’UN FRAGMENT
 Pour rappel, quand on est dans une activité :
 Dans onCreate, on instancie les objets ;
 Dans onStart, on lance les traitements ;
 Dans onResume, on s'abonne et on remet le contexte
utilisateur ;
 Dans onPause, on se désabonne et on enregistre le contexte
utilisateur ;
 Dans onStop on arrête les traitements et on désalloue les
objets ;
 Dans onDestroy on ne fait rien (elle n'est pas appelée
systématiquement), on préfère utiliser les méthodes de
type onTrimMemory pour connaître l'état de l'application dans
le LRU cache.
 Les fragments possèdent leur propre cycle de vie et
celui-ci est intimement lié à celui de l'activité qui le
contient.
Imene Sghaier-Développement Mobile Avancé
12
CYCLE DE VIE D’UN FRAGMENT
 Les fragments ont un cycle de vie similaire à celui des
activités, avec quelques méthodes de plus
correspondant à leur intégration dans une activité.
13
Imene Sghaier-Développement Mobile Avancé
CYCLE DE VIE D’UN FRAGMENT
 Au lieu de déclarer une vue dans le onCreate() telle une
activité (setContentView), le fragment possède 2
fonctions principales :
 onCreateView(inflater,container,savedInstanceState)
: demande d’inflater la vue à utiliser par ce fragment
 onViewCreated(view,savedInstanceState) : le
fragment possède enfin une vue, nous pouvons
récupérer nos widgets (TextView, etc.) puis les modifier
Imene Sghaier-Développement Mobile Avancé
14
CYCLE DE VIE D’UN FRAGMENT
 Quand on est dans un fragment :
 Dans onAttach, on récupère un pointeur vers l'activité contenante
(attention aux NullPointerException, celle-ci n'a pas finalisé sa
construction) ;
 Dans onCreate, on instancie les objets non graphiques ;
 Dans onCreateView, on instancie la vue et les composants
graphiques ;
 Dans onActivityCreate, on récupère un pointeur sur l'activité (qui est
construite), on lance les initialisations qui ont besoin de cette activité,
on restaure le contexte des fragments et utilisateur.
 Dans onStart, on lance les traitements ;
 Dans onResume, on s'abonne et on remet le contexte utilisateur ;
 Dans onPause, on se désabonne et on enregistre le contexte
utilisateur ;
 Dans onStop, on arrête les traitements et on désalloue les objets ;
 Dans onDestroyView, la vue est détachée de celle de l'activité, on
peut délivrer la mémoire des objets graphiques ;
 Dans onDestroy, libération de ressources
 Dans onDetach, rien
Imene Sghaier-Développement Mobile Avancé
15
16
• Introduction
• Définition et propriétés
• Structure d’un fragment
• Types de fragments
• Cycle de vie d’un fragment
• La méthode onCreateView et autres méthodes
• Fragment statique
• Création d’un fragment
• Création de l'activité qui va accueillir le Fragment
• Positionner les fragments
• Fragments dynamiques
• Interaction entre activité et fragments
PLAN DU CHAPITRE
Imene Sghaier-Développement Mobile Avancé
LA MÉTHODE ONCREATEVIEW ET AUTRES MÉTHODES
 Dans la pratique, la méthode onCreateView est la méthode que l'on
utilise pour créer la vue qui sera affichée par le fragment.
 C'est la méthode qui est systématiquement surchargée.
 inflater : permet de gonfler le fichier xml de layout ;
 container : Si non-null, correspond à la vue parente qui contient le
fragment et à laquelle la vue du fragment va s'attacher ;
 savedInstanceState : si non-null, le fragment est reconstruit à partir
d'un état précédent sauvegardé et transmis par ce paramètre.
 Le code typique de la méthode onCreateView gonfle le fichier xml
pour en construire une vue et la renvoyer
Imene Sghaier-Développement Mobile Avancé
17
LA MÉTHODE ONCREATEVIEW ET AUTRES MÉTHODES
Comme pour les activités, les bonnes pratiques sont :
 onCreate permet de créer les objets de la classe pour qu'ils
soient instanciés une seule fois dans le cycle de vie du
fragment ;
 onCreate ne crée pas l'interface graphique ;
 onCreateView crée l'interface graphique ;
 onActivityCreated permet de récupérer un pointeur vers
l'activité ;
 onDestroy n'est pas toujours appelée (que ce soit pour
l'activité comme pour le fragment) ;
 onAttach permet de récupérer une instance de l'activité
parente, mais attention, elle n'a pas fini son initialisation (il
vaut mieux attendre onActivityCreated).
 NB: Un fragment peut finir son cycle de vie sans que
l'activité ne modifie le sien (reste à l'état actif).
Imene Sghaier-Développement Mobile Avancé
18
LA MÉTHODE ONCREATEVIEW ET AUTRES MÉTHODES
 De lui-même, un fragment n’est pas capable de s’afficher.
Il ne peut apparaître que dans le cadre d’une activité,
comme une sorte de vue interne.
 On peut le faire de deux manières :
 statiquement : les fragments à afficher sont prévus
dans le layout de l’activité. C’est le plus simple à faire
et à comprendre.
 dynamiquement : les fragments sont ajoutés, enlevés
ou remplacés en cours de route selon les besoins.
Imene Sghaier-Développement Mobile Avancé
19
20
• Introduction
• Définition et propriétés
• Structure d’un fragment
• Types de fragments
• Cycle de vie d’un fragment
• La méthode onCreateView et autres méthodes
• Fragment statique
• Création d’un fragment
• Création de l'activité qui va accueillir le Fragment
• Positionner les fragments
• Fragments dynamiques
• Interaction entre activité et fragments
PLAN DU CHAPITRE
Imene Sghaier-Développement Mobile Avancé
FRAGMENT STATIQUE
 Dans ce cas, c’est le layout de l’activité qui inclut les
fragments, p. ex. res/layout-land/main_activity.xml. Ils ne
peuvent pas être modifiés ultérieurement.
 Un fragment statique ne peut être ni supprimé, ni
remplacé ; il est statique.
 L'interface graphique du fragment se définit dans un
fichier xml. Il n'y a aucune différence entre un fichier xml
de layout (avant HoneyComb) pour une activité et un
fichier xml de layout pour un fragment. La syntaxe est
identique.
Imene Sghaier-Développement Mobile Avancé
21
FRAGMENT STATIQUE
 Pour qu'une activité utilise un fragment statique, il suffit de déclarer
le fragment en tant qu'objet graphique au sein du fichier de layout
de votre activité.
Imene Sghaier-Développement Mobile Avancé
22
La balise fragment
android:name permet de
spécifier la classe qui prend
en charge l'implémentation du
fragment
FRAGMENT STATIQUE: CRÉATION
 Afin de créer un fragment il suffit d’hériter la
classe Fragment (MyFragment par exemple) et redéfinir la
méthode onCreateView.
 Le point important se produit lors du gonflage de la
vue inflater.inflate(R.layout.speaker_detail, container, false).
 Le dernier paramètre (qui est à false) spécifie si la vue doit être
automatiquement attachée à son container parent. Dans le cas d'un
fragment, cette liaison doit être laissée au système qui se charge de la
rattacher comme il se doit à l'activité.
 Dans cette classe vous allez coder votre comportement, faire vos
findViewById et tout le code que vous auriez mis dans votre activité.
 Il suffit de coder « comme avant », directement dans votre fragment.
Imene Sghaier-Développement Mobile Avancé
23
FRAGMENT STATIQUE: CRÉATION DE L'ACTIVITÉ QUI VA ACCUEILLIR
LE FRAGMENT
Imene Sghaier-Développement Mobile Avancé
24
FRAGMENT STATIQUE: POSITIONNER LES
FRAGMENTS
 Le plus efficace pour positionner les fragments est d'utiliser la balise
weight
 L'astuce, ici, est de demander une taille de 0dp aux fragments.
 L'espace libre restant correspond à la largeur complète du layout. La
balise weight redistribue cet espace libre à chacun des composants
1/3 pour le fragment A qui pèse 1 (car 1+2=3 et vaut le poids total) et
2/3 pour le fragment B qui pèse 2.
Imene Sghaier-Développement Mobile Avancé
25
26
• Introduction
• Définition et propriétés
• Structure d’un fragment
• Types de fragments
• Cycle de vie d’un fragment
• La méthode onCreateView et autres méthodes
• Fragment statique
• Création d’un fragment
• Création de l'activité qui va accueillir le Fragment
• Positionner les fragments
• Fragments dynamiques
• Interaction entre activité et fragments
PLAN DU CHAPITRE
Imene Sghaier-Développement Mobile Avancé
FRAGMENT DYNAMIQUE
 Pour définir des fragments dynamiquement, on fait appel au
FragmentManager de l’activité.
 Il gère l’affichage des fragments.
 L’ajout et la suppression de fragments se fait à l’aide de transactions.
C’est simplement l’association entre un « réceptacle » (un
FrameLayout vide) et un fragment.
 Soit un layout contenant deux FrameLayout vides :
On peut dynamiquement attribuer un fragment à chacun.
Imene Sghaier-Développement Mobile Avancé
27
FRAGMENT DYNAMIQUE
 Ici les FrameLayout sont remplacés par les fragments.
Imene Sghaier-Développement Mobile Avancé
28
29
• Introduction
• Définition et propriétés
• Structure d’un fragment
• Types de fragments
• Cycle de vie d’un fragment
• La méthode onCreateView et autres méthodes
• Fragment statique
• Création d’un fragment
• Création de l'activité qui va accueillir le Fragment
• Positionner les fragments
• Fragments dynamiques
• Interaction entre activité et fragments
PLAN DU CHAPITRE
Imene Sghaier-Développement Mobile Avancé
INTERACTION ENTRE ACTIVITÉ ET FRAGMENTS
Imene Sghaier-Développement Mobile Avancé
30

Contenu connexe

Similaire à chapitre 8 Android 2.pptx

My droid
My droidMy droid
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
Arnaud Héritier
 
Gnu Screen
Gnu ScreenGnu Screen
Gnu Screen
Stefano Amekoudi
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
Julien Wittouck
 
Unified Modeling Language Intro 2021-2022 VF
Unified Modeling Language Intro 2021-2022 VFUnified Modeling Language Intro 2021-2022 VF
Unified Modeling Language Intro 2021-2022 VF
cifaf13039
 
Conception d'un Extranet
Conception d'un ExtranetConception d'un Extranet
Conception d'un Extranet
JEAN-GUILLAUME DUJARDIN
 
Lbv Dev Meetup #2
 Lbv Dev Meetup #2 Lbv Dev Meetup #2
Lbv Dev Meetup #2
LbvDev
 
DrupalCamp2013 - "libérez drupal"
DrupalCamp2013 - "libérez drupal"DrupalCamp2013 - "libérez drupal"
DrupalCamp2013 - "libérez drupal"
Laurent Chardin
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
Ippon
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
ENSET, Université Hassan II Casablanca
 
VDLT - Retour DevFest 2023
VDLT - Retour DevFest 2023VDLT - Retour DevFest 2023
VDLT - Retour DevFest 2023
SpikeeLabs
 
Présentation scrum pour cours leeaarn
Présentation scrum pour cours leeaarnPrésentation scrum pour cours leeaarn
Présentation scrum pour cours leeaarn
Gautier Pialat
 
Scub Foundation, usine logicielle Java libre
Scub Foundation, usine logicielle Java libreScub Foundation, usine logicielle Java libre
Scub Foundation, usine logicielle Java libre
Stéphane Traumat
 
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
MBA Multimedia
 
Android2017 cours2
Android2017 cours2Android2017 cours2
Android2017 cours2
Anne-Marie Pinna-Dery
 
HTML5/CSS3D - Expresso Rennes Atalante - 17 sept. 2013
HTML5/CSS3D - Expresso Rennes Atalante - 17 sept. 2013HTML5/CSS3D - Expresso Rennes Atalante - 17 sept. 2013
HTML5/CSS3D - Expresso Rennes Atalante - 17 sept. 2013
Julien LE THUAUT
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
Arnaud Héritier
 
Presentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub FoundationPresentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub Foundation
Stéphane Traumat
 
Introduction scrum v0.7
Introduction scrum v0.7Introduction scrum v0.7
Introduction scrum v0.7
CClr
 
Spring 3 en production
Spring 3 en productionSpring 3 en production
Spring 3 en production
Julien Dubois
 

Similaire à chapitre 8 Android 2.pptx (20)

My droid
My droidMy droid
My droid
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
 
Gnu Screen
Gnu ScreenGnu Screen
Gnu Screen
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
Unified Modeling Language Intro 2021-2022 VF
Unified Modeling Language Intro 2021-2022 VFUnified Modeling Language Intro 2021-2022 VF
Unified Modeling Language Intro 2021-2022 VF
 
Conception d'un Extranet
Conception d'un ExtranetConception d'un Extranet
Conception d'un Extranet
 
Lbv Dev Meetup #2
 Lbv Dev Meetup #2 Lbv Dev Meetup #2
Lbv Dev Meetup #2
 
DrupalCamp2013 - "libérez drupal"
DrupalCamp2013 - "libérez drupal"DrupalCamp2013 - "libérez drupal"
DrupalCamp2013 - "libérez drupal"
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
 
VDLT - Retour DevFest 2023
VDLT - Retour DevFest 2023VDLT - Retour DevFest 2023
VDLT - Retour DevFest 2023
 
Présentation scrum pour cours leeaarn
Présentation scrum pour cours leeaarnPrésentation scrum pour cours leeaarn
Présentation scrum pour cours leeaarn
 
Scub Foundation, usine logicielle Java libre
Scub Foundation, usine logicielle Java libreScub Foundation, usine logicielle Java libre
Scub Foundation, usine logicielle Java libre
 
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
 
Android2017 cours2
Android2017 cours2Android2017 cours2
Android2017 cours2
 
HTML5/CSS3D - Expresso Rennes Atalante - 17 sept. 2013
HTML5/CSS3D - Expresso Rennes Atalante - 17 sept. 2013HTML5/CSS3D - Expresso Rennes Atalante - 17 sept. 2013
HTML5/CSS3D - Expresso Rennes Atalante - 17 sept. 2013
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
 
Presentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub FoundationPresentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub Foundation
 
Introduction scrum v0.7
Introduction scrum v0.7Introduction scrum v0.7
Introduction scrum v0.7
 
Spring 3 en production
Spring 3 en productionSpring 3 en production
Spring 3 en production
 

Plus de Institut Supérieur des Etudes Technologiques de Nabeul

Les sockets.pptx
Les sockets.pptxLes sockets.pptx
chapitre 7 Android 2.pptx
chapitre 7 Android 2.pptxchapitre 7 Android 2.pptx
chapitre 6 Android 2.pptx
chapitre 6 Android 2.pptxchapitre 6 Android 2.pptx
chapitre 5 Android 2.pptx
chapitre 5 Android 2.pptxchapitre 5 Android 2.pptx
chapitre 4 Android 2.pptx
chapitre 4 Android 2.pptxchapitre 4 Android 2.pptx
chapitre 3 Android 2.pptx
chapitre 3 Android 2.pptxchapitre 3 Android 2.pptx
chapitre 2 Android 2.pptx
chapitre 2 Android 2.pptxchapitre 2 Android 2.pptx
chapitre 1 Android 2.pptx
chapitre 1 Android 2.pptxchapitre 1 Android 2.pptx
chap 3 Technologies de communication.pdf
chap 3 Technologies de communication.pdfchap 3 Technologies de communication.pdf
chap 3 Technologies de communication.pdf
Institut Supérieur des Etudes Technologiques de Nabeul
 
Introduction à l'IoT.pdf
Introduction à l'IoT.pdfIntroduction à l'IoT.pdf
chap 7 POO Java Les Exceptions.pptx
chap 7 POO Java Les Exceptions.pptxchap 7 POO Java Les Exceptions.pptx
chap 7 POO Java Les Exceptions.pptx
Institut Supérieur des Etudes Technologiques de Nabeul
 
Chap 6 POO Java.pptx
Chap 6 POO Java.pptxChap 6 POO Java.pptx

Plus de Institut Supérieur des Etudes Technologiques de Nabeul (20)

Les sockets.pptx
Les sockets.pptxLes sockets.pptx
Les sockets.pptx
 
chapitre 7 Android 2.pptx
chapitre 7 Android 2.pptxchapitre 7 Android 2.pptx
chapitre 7 Android 2.pptx
 
chapitre 6 Android 2.pptx
chapitre 6 Android 2.pptxchapitre 6 Android 2.pptx
chapitre 6 Android 2.pptx
 
chapitre 5 Android 2.pptx
chapitre 5 Android 2.pptxchapitre 5 Android 2.pptx
chapitre 5 Android 2.pptx
 
chapitre 4 Android 2.pptx
chapitre 4 Android 2.pptxchapitre 4 Android 2.pptx
chapitre 4 Android 2.pptx
 
chapitre 3 Android 2.pptx
chapitre 3 Android 2.pptxchapitre 3 Android 2.pptx
chapitre 3 Android 2.pptx
 
chapitre 2 Android 2.pptx
chapitre 2 Android 2.pptxchapitre 2 Android 2.pptx
chapitre 2 Android 2.pptx
 
chapitre 1 Android 2.pptx
chapitre 1 Android 2.pptxchapitre 1 Android 2.pptx
chapitre 1 Android 2.pptx
 
Python chapitre 7.pdf
Python chapitre 7.pdfPython chapitre 7.pdf
Python chapitre 7.pdf
 
Python chapitre 6.pdf
Python chapitre 6.pdfPython chapitre 6.pdf
Python chapitre 6.pdf
 
Python chapitre 5.pdf
Python chapitre 5.pdfPython chapitre 5.pdf
Python chapitre 5.pdf
 
Python chapitre 4.pdf
Python chapitre 4.pdfPython chapitre 4.pdf
Python chapitre 4.pdf
 
Python chapitre 3.pdf
Python chapitre 3.pdfPython chapitre 3.pdf
Python chapitre 3.pdf
 
Python chapitre 2.pdf
Python chapitre 2.pdfPython chapitre 2.pdf
Python chapitre 2.pdf
 
Python chapitre 1.pdf
Python chapitre 1.pdfPython chapitre 1.pdf
Python chapitre 1.pdf
 
chap 3 Technologies de communication.pdf
chap 3 Technologies de communication.pdfchap 3 Technologies de communication.pdf
chap 3 Technologies de communication.pdf
 
Chap 2 capteurs et IoT.pdf
Chap 2 capteurs et IoT.pdfChap 2 capteurs et IoT.pdf
Chap 2 capteurs et IoT.pdf
 
Introduction à l'IoT.pdf
Introduction à l'IoT.pdfIntroduction à l'IoT.pdf
Introduction à l'IoT.pdf
 
chap 7 POO Java Les Exceptions.pptx
chap 7 POO Java Les Exceptions.pptxchap 7 POO Java Les Exceptions.pptx
chap 7 POO Java Les Exceptions.pptx
 
Chap 6 POO Java.pptx
Chap 6 POO Java.pptxChap 6 POO Java.pptx
Chap 6 POO Java.pptx
 

chapitre 8 Android 2.pptx

  • 1. LES FRAGMENTS 2017-2018 © Imene Sghaier ISET Nabeul SEM3
  • 2. 2  Objectifs spécifiques  Se familiariser avec la manipulation des fragments  Eléments de contenu • Introduction • Définition et propriétés • Structure d’un fragment • Types de fragments • Cycle de vie d’un fragment • La méthode onCreateView et autres méthodes • Fragment statique • Création d’un fragment • Création de l'activité qui va accueillir le Fragment • Positionner les fragments • Fragments dynamiques • Interaction entre activity et fragments  Volume Horaire :  Cours : 1.5 heure OBJECTIFS ET ÉLÉMENTS DE CONTENU Imene Sghaier-Développement Mobile Avancé
  • 3. INTRODUCTION  Pour s'adapter à toutes les tailles d'écrans. Il suffit de mettre un layout particulier dans layout-small, layout- normal, layout-large, layout-xlarge, pour obtenir l'I.H.M. souhaitée en fonction des caractéristiques de l'écran.  Toutefois, l'activité qui contrôle tous ces cas deviendra très complexe  Ceci a motivé à créer les fragments ; Imene Sghaier-Développement Mobile Avancé 3
  • 4. 4 • Introduction • Définition et propriétés • Structure d’un fragment • Types de fragments • Cycle de vie d’un fragment • La méthode onCreateView et autres méthodes • Fragment statique • Création d’un fragment • Création de l'activité qui va accueillir le Fragment • Positionner les fragments • Fragments dynamiques • Interaction entre activité et fragments PLAN DU CHAPITRE Imene Sghaier-Développement Mobile Avancé
  • 5. DÉFINITION ET PROPRIÉTÉS  Un fragment est un sous-contrôleur d’une activité, contenant une vue ainsi que son propre cycle de vie, capable d’être ajouté/retiré/déplacé d’une activité  Les fragments permettent de sectionner vos activités en composants encapsulés et réutilisables qui possèdent leur propre cycle de vie et leur propre interface graphique. Cela permet de mettre en place des I.H.M évoluées qui s'adaptent aux différents écrans et à leur orientation tout en maintenant le code de l'activité « human readable ».  Ainsi, dans l'exemple ci-dessous (celui de Google), nous voyons comment l'activité A s'adapte en fonction de la taille de l'écran. Imene Sghaier-Développement Mobile Avancé 5
  • 6. DÉFINITION ET PROPRIÉTÉS  Les fragments déportent une partie du traitement de l'activité en leur sein ;  Les fragments sont liés à une activité (ils n'existent pas sans elle) ;  Les fragments définissent la plupart du temps une interface graphique, mais peuvent aussi être utilisés pour retenir un état lors de la destruction/reconstruction de leur activité parente (le bon vieux onRetainNonConfigurationInstance) ;  Les fragments peuvent être statiques (définis une fois pour toutes dans le fichier de layout) ou dynamiques (créés, supprimés, ajoutés dynamiquement) ;  Les fragments sont apparus à partir de HoneyComb (level 11) ainsi, pour les mettre en place avant HoneyComb, il faut utiliser la support- librairy ;  Pour les utiliser, il faut un BuildSDK et un TragetSDK supérieur à 11.  Les classes fondamentales pour la gestion des fragments sont : Fragment, FragmentManager et FragmentTransaction. Imene Sghaier-Développement Mobile Avancé 6
  • 7. 7 • Introduction • Définition et propriétés • Structure d’un fragment • Types de fragments • Cycle de vie d’un fragment • La méthode onCreateView et autres méthodes • Fragment statique • Création d’un fragment • Création de l'activité qui va accueillir le Fragment • Positionner les fragments • Fragments dynamiques • Interaction entre activité et fragments PLAN DU CHAPITRE Imene Sghaier-Développement Mobile Avancé
  • 8. STRUCTURE D’UN FRAGMENT  Un fragment est une activité très simplifiée. C’est seulement un arbre de vue défini par un layout, et des écouteurs. Un fragment minimal possède cette structure: 8 Imene Sghaier-Développement Mobile Avancé
  • 9. 9 • Introduction • Définition et propriétés • Structure d’un fragment • Types de fragments • Cycle de vie d’un fragment • La méthode onCreateView et autres méthodes • Fragment statique • Création d’un fragment • Création de l'activité qui va accueillir le Fragment • Positionner les fragments • Fragments dynamiques • Interaction entre activité et fragments PLAN DU CHAPITRE Imene Sghaier-Développement Mobile Avancé
  • 10. TYPES DE FRAGMENTS  Il existe différents types de fragments, voici quelques uns :  ListFragment pour afficher une liste d’items, comme le ferait une ListActivity.  DialogFragment pour afficher un fragment dans une fenêtre flottante au dessus d’une activité.  PreferenceFragment pour gérer les préférences. En commun : il faut surcharger la méthode onCreateView qui définit leur contenu. 10 Imene Sghaier-Développement Mobile Avancé
  • 11. 11 • Introduction • Définition et propriétés • Structure d’un fragment • Types de fragments • Cycle de vie d’un fragment • La méthode onCreateView et autres méthodes • Fragment statique • Création d’un fragment • Création de l'activité qui va accueillir le Fragment • Positionner les fragments • Fragments dynamiques • Interaction entre activité et fragments PLAN DU CHAPITRE Imene Sghaier-Développement Mobile Avancé
  • 12. CYCLE DE VIE D’UN FRAGMENT  Pour rappel, quand on est dans une activité :  Dans onCreate, on instancie les objets ;  Dans onStart, on lance les traitements ;  Dans onResume, on s'abonne et on remet le contexte utilisateur ;  Dans onPause, on se désabonne et on enregistre le contexte utilisateur ;  Dans onStop on arrête les traitements et on désalloue les objets ;  Dans onDestroy on ne fait rien (elle n'est pas appelée systématiquement), on préfère utiliser les méthodes de type onTrimMemory pour connaître l'état de l'application dans le LRU cache.  Les fragments possèdent leur propre cycle de vie et celui-ci est intimement lié à celui de l'activité qui le contient. Imene Sghaier-Développement Mobile Avancé 12
  • 13. CYCLE DE VIE D’UN FRAGMENT  Les fragments ont un cycle de vie similaire à celui des activités, avec quelques méthodes de plus correspondant à leur intégration dans une activité. 13 Imene Sghaier-Développement Mobile Avancé
  • 14. CYCLE DE VIE D’UN FRAGMENT  Au lieu de déclarer une vue dans le onCreate() telle une activité (setContentView), le fragment possède 2 fonctions principales :  onCreateView(inflater,container,savedInstanceState) : demande d’inflater la vue à utiliser par ce fragment  onViewCreated(view,savedInstanceState) : le fragment possède enfin une vue, nous pouvons récupérer nos widgets (TextView, etc.) puis les modifier Imene Sghaier-Développement Mobile Avancé 14
  • 15. CYCLE DE VIE D’UN FRAGMENT  Quand on est dans un fragment :  Dans onAttach, on récupère un pointeur vers l'activité contenante (attention aux NullPointerException, celle-ci n'a pas finalisé sa construction) ;  Dans onCreate, on instancie les objets non graphiques ;  Dans onCreateView, on instancie la vue et les composants graphiques ;  Dans onActivityCreate, on récupère un pointeur sur l'activité (qui est construite), on lance les initialisations qui ont besoin de cette activité, on restaure le contexte des fragments et utilisateur.  Dans onStart, on lance les traitements ;  Dans onResume, on s'abonne et on remet le contexte utilisateur ;  Dans onPause, on se désabonne et on enregistre le contexte utilisateur ;  Dans onStop, on arrête les traitements et on désalloue les objets ;  Dans onDestroyView, la vue est détachée de celle de l'activité, on peut délivrer la mémoire des objets graphiques ;  Dans onDestroy, libération de ressources  Dans onDetach, rien Imene Sghaier-Développement Mobile Avancé 15
  • 16. 16 • Introduction • Définition et propriétés • Structure d’un fragment • Types de fragments • Cycle de vie d’un fragment • La méthode onCreateView et autres méthodes • Fragment statique • Création d’un fragment • Création de l'activité qui va accueillir le Fragment • Positionner les fragments • Fragments dynamiques • Interaction entre activité et fragments PLAN DU CHAPITRE Imene Sghaier-Développement Mobile Avancé
  • 17. LA MÉTHODE ONCREATEVIEW ET AUTRES MÉTHODES  Dans la pratique, la méthode onCreateView est la méthode que l'on utilise pour créer la vue qui sera affichée par le fragment.  C'est la méthode qui est systématiquement surchargée.  inflater : permet de gonfler le fichier xml de layout ;  container : Si non-null, correspond à la vue parente qui contient le fragment et à laquelle la vue du fragment va s'attacher ;  savedInstanceState : si non-null, le fragment est reconstruit à partir d'un état précédent sauvegardé et transmis par ce paramètre.  Le code typique de la méthode onCreateView gonfle le fichier xml pour en construire une vue et la renvoyer Imene Sghaier-Développement Mobile Avancé 17
  • 18. LA MÉTHODE ONCREATEVIEW ET AUTRES MÉTHODES Comme pour les activités, les bonnes pratiques sont :  onCreate permet de créer les objets de la classe pour qu'ils soient instanciés une seule fois dans le cycle de vie du fragment ;  onCreate ne crée pas l'interface graphique ;  onCreateView crée l'interface graphique ;  onActivityCreated permet de récupérer un pointeur vers l'activité ;  onDestroy n'est pas toujours appelée (que ce soit pour l'activité comme pour le fragment) ;  onAttach permet de récupérer une instance de l'activité parente, mais attention, elle n'a pas fini son initialisation (il vaut mieux attendre onActivityCreated).  NB: Un fragment peut finir son cycle de vie sans que l'activité ne modifie le sien (reste à l'état actif). Imene Sghaier-Développement Mobile Avancé 18
  • 19. LA MÉTHODE ONCREATEVIEW ET AUTRES MÉTHODES  De lui-même, un fragment n’est pas capable de s’afficher. Il ne peut apparaître que dans le cadre d’une activité, comme une sorte de vue interne.  On peut le faire de deux manières :  statiquement : les fragments à afficher sont prévus dans le layout de l’activité. C’est le plus simple à faire et à comprendre.  dynamiquement : les fragments sont ajoutés, enlevés ou remplacés en cours de route selon les besoins. Imene Sghaier-Développement Mobile Avancé 19
  • 20. 20 • Introduction • Définition et propriétés • Structure d’un fragment • Types de fragments • Cycle de vie d’un fragment • La méthode onCreateView et autres méthodes • Fragment statique • Création d’un fragment • Création de l'activité qui va accueillir le Fragment • Positionner les fragments • Fragments dynamiques • Interaction entre activité et fragments PLAN DU CHAPITRE Imene Sghaier-Développement Mobile Avancé
  • 21. FRAGMENT STATIQUE  Dans ce cas, c’est le layout de l’activité qui inclut les fragments, p. ex. res/layout-land/main_activity.xml. Ils ne peuvent pas être modifiés ultérieurement.  Un fragment statique ne peut être ni supprimé, ni remplacé ; il est statique.  L'interface graphique du fragment se définit dans un fichier xml. Il n'y a aucune différence entre un fichier xml de layout (avant HoneyComb) pour une activité et un fichier xml de layout pour un fragment. La syntaxe est identique. Imene Sghaier-Développement Mobile Avancé 21
  • 22. FRAGMENT STATIQUE  Pour qu'une activité utilise un fragment statique, il suffit de déclarer le fragment en tant qu'objet graphique au sein du fichier de layout de votre activité. Imene Sghaier-Développement Mobile Avancé 22 La balise fragment android:name permet de spécifier la classe qui prend en charge l'implémentation du fragment
  • 23. FRAGMENT STATIQUE: CRÉATION  Afin de créer un fragment il suffit d’hériter la classe Fragment (MyFragment par exemple) et redéfinir la méthode onCreateView.  Le point important se produit lors du gonflage de la vue inflater.inflate(R.layout.speaker_detail, container, false).  Le dernier paramètre (qui est à false) spécifie si la vue doit être automatiquement attachée à son container parent. Dans le cas d'un fragment, cette liaison doit être laissée au système qui se charge de la rattacher comme il se doit à l'activité.  Dans cette classe vous allez coder votre comportement, faire vos findViewById et tout le code que vous auriez mis dans votre activité.  Il suffit de coder « comme avant », directement dans votre fragment. Imene Sghaier-Développement Mobile Avancé 23
  • 24. FRAGMENT STATIQUE: CRÉATION DE L'ACTIVITÉ QUI VA ACCUEILLIR LE FRAGMENT Imene Sghaier-Développement Mobile Avancé 24
  • 25. FRAGMENT STATIQUE: POSITIONNER LES FRAGMENTS  Le plus efficace pour positionner les fragments est d'utiliser la balise weight  L'astuce, ici, est de demander une taille de 0dp aux fragments.  L'espace libre restant correspond à la largeur complète du layout. La balise weight redistribue cet espace libre à chacun des composants 1/3 pour le fragment A qui pèse 1 (car 1+2=3 et vaut le poids total) et 2/3 pour le fragment B qui pèse 2. Imene Sghaier-Développement Mobile Avancé 25
  • 26. 26 • Introduction • Définition et propriétés • Structure d’un fragment • Types de fragments • Cycle de vie d’un fragment • La méthode onCreateView et autres méthodes • Fragment statique • Création d’un fragment • Création de l'activité qui va accueillir le Fragment • Positionner les fragments • Fragments dynamiques • Interaction entre activité et fragments PLAN DU CHAPITRE Imene Sghaier-Développement Mobile Avancé
  • 27. FRAGMENT DYNAMIQUE  Pour définir des fragments dynamiquement, on fait appel au FragmentManager de l’activité.  Il gère l’affichage des fragments.  L’ajout et la suppression de fragments se fait à l’aide de transactions. C’est simplement l’association entre un « réceptacle » (un FrameLayout vide) et un fragment.  Soit un layout contenant deux FrameLayout vides : On peut dynamiquement attribuer un fragment à chacun. Imene Sghaier-Développement Mobile Avancé 27
  • 28. FRAGMENT DYNAMIQUE  Ici les FrameLayout sont remplacés par les fragments. Imene Sghaier-Développement Mobile Avancé 28
  • 29. 29 • Introduction • Définition et propriétés • Structure d’un fragment • Types de fragments • Cycle de vie d’un fragment • La méthode onCreateView et autres méthodes • Fragment statique • Création d’un fragment • Création de l'activité qui va accueillir le Fragment • Positionner les fragments • Fragments dynamiques • Interaction entre activité et fragments PLAN DU CHAPITRE Imene Sghaier-Développement Mobile Avancé
  • 30. INTERACTION ENTRE ACTIVITÉ ET FRAGMENTS Imene Sghaier-Développement Mobile Avancé 30