Académique Documents
Professionnel Documents
Culture Documents
Android Activity
and
Fragment
Badis Djamaa & Adnane Benaissa
Ecole Militaire Polytechnique
2
Sujets d’aujourd'hui
1. La classe activité
4. La classe Fragment
• Structure
9
• Les Intents
• Le graph de navigation
https://developer.android.com/guide/navigation/navigation-design-graph
10
• Une tâche est un ensemble d'activités avec lesquelles les • Lorsqu'une Activité d’une tâche est
utilisateurs interagissent lorsqu'ils effectuent un travail. lancée, elle passe au-dessus de la pile
• Les activités sont organisées dans une pile (la pile arrière). • Lorsque l'activité est détruite, elle est
extraite de la pile arrière
une tâche
11
Android annonce les changements d'état du cycle de vie d'activité en appelant des méthodes d'activité spécifiques.
13
• Appelé lorsque durant le passage à une autre activité (focus about to switch)
• Actions typiques: arrêter les comportements au premier plan uniquement, enregistrer
l'état persistant
• L'activité n'est plus visible par l'utilisateur peut être redémarrée plus tard
• Actions typiques: mettre en cache l'état de l'activité et libérer ses ressources
• Remarque: ne peut pas être appelé si Android tue votre application
• StartActivity ()
• StartActivityForResult ()
Les données difficiles à recalculer peuvent être mises en cache pour accélérer la gestion des changements de
configuration.
Note: Ces méthodes ont été abandonnées en faveur des méthodes dans la class Fragment a
partir de la version 3.0 (L'activité meurt mais le fragment “top-level” reste)
27
• Créer plusieurs layouts selon les tailles d'écrans (layout-small, layout-normal, layout-large, layout-xlarge), pour
obtenir l'I.H.M. souhaitée en fonction des caractéristiques de l'écran.
• Par contre, l'activité qui contrôlait tous ces cas devenait très complexe; la capacité d'un esprit humain à
comprendre, modifier, corriger ou faire évoluer l'activité devenait réduite, les méthodes du cycle de vie faisaient 50 à
100 lignes. Et finalement, l'activité devenait ingérable.
La class Fragment:
• Créer une manière simple, efficace et réutilisable pour l'adaptation d'une application Android à toutes les tailles
d'appareils existants.
29
• Les fragments permettent de scinder vos activités en composants encapsulés et réutilisables qui possèdent leur
propre cycle de vie et leur propre interface graphique.
30
• Typiquement une interface (layout) en XML, mais peut aussi être utilisés
pour retenir un état lors de la destruction/reconstruction de leur activité
parente (remplacer onRetainNonConfigurationInstance);
Un fragment s'exécute dans le contexte d'une activité mais possède son propre cycle de vie
Les fragments peuvent être ajoutés à une activité de manière statique (définis une fois pour toutes dans le fichier de
layout) ; ou dynamique (créés, supprimés, ajoutés dynamiquement)
Les classes fondamentales de gestion des fragments sont : Fragment, FragmentManager et FragmentTransaction.
On peut aussi utiliser les sous-classes : ListFragment and DialogFragment
31
Comme l'activité, un fragment possède son propre cycle de vie mais il est toujours connecté au cycle de vie de
l'activité qui l'utilise. Comme une activité, un fragment peut exister dans trois états:
• onAttach, Appelé lorsque le fragment a été associé à l'activité (l'activité est passée ici).
• on récupère un pointeur vers l'activité contenante ;
• Dans votre implémentation, vous devez initialiser les composants essentiels du fragment que vous souhaitez
conserver lorsque le fragment est suspendu ou arrêté, puis repris.
• onCreateView (): Le système appelle cette methode lorsqu'il est temps que le fragment dessine son interface
utilisateur pour la première fois.
• Pour dessiner une interface utilisateur pour votre fragment, vous devez renvoyer une vue de cette méthode
qui est la racine du layout de votre fragment. Vous pouvez retourner null si le fragment ne fournit pas
d'interface utilisateur.
• onPause () : Le système appelle cette méthode comme la première indication que l'utilisateur quitte le fragment
(bien que cela ne signifie pas toujours que le fragment est détruit).
• C'est généralement là que vous devez valider toutes les modifications qui devraient persister au-delà de la
session utilisateur en cours (car l'utilisateur peut ne pas revenir).
35
onCreateView: 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.
Le code typique de la méthode onCreateView instancie le fichier xml pour en construire une vue et la renvoyer :
• inflater : Il permet d’instancier le fichier layout XML dans l’objet View correspondant.
• 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 cycle de vie d'un fragment
(pendant que son activité est en cours).
Habituellement, un fragment contribue une partie de l’UI à l'activité hôte, qui est incorporée dans le cadre de la
hiérarchie de vue globale de l'activité. Il existe deux façons d'ajouter un fragment à l'activité:
• Déclarez le fragment dans le fichier de mise en page de l'activité (statique): Dans ce cas, vous pouvez spécifier
les propriétés du layout du fragment comme s'il s'agissait d'une vue.
38
• Lorsque le système crée le layout d'activité, il instancie chaque fragment spécifié dans le layout et appelle la
méthode onCreateView () pour chacun.
• Pour récupérer le layout de chaque fragment. Le système insère la vue renvoyée par le fragment
directement à la place de l'élément <fragment>.
• L’attribut android:name dans <fragment> spécifie la classe Fragment a instancier dans le layout
• A ce point, on peut même accéder aux objets du layout du fragment en utilisant findViewById
. 39
• Ajouter le fragment par programmation dans un ViewGroup existant (Dynamique): À tout moment pendant
l'exécution d’une activité, vous pouvez ajouter des fragments. Il vous suffit de spécifier un ViewGroup dans lequel
placer le fragment.
• Pour effectuer des transactions de fragment dans votre activité (comme ajouter, supprimer ou remplacer un
fragment), vous devez utiliser les API de FragmentTransaction. Vous pouvez obtenir une instance de
FragmentTransaction de votre FragmentActivity comme ceci:
• Vous pouvez ensuite ajouter un fragment à l'aide de la méthode add (), en spécifiant le fragment à ajouter et la vue
dans laquelle l'insérer. Par exemple:
. 40
• Cependant, avant d'appeler commit (), vous pourriez vouloir appeler addToBackStack (), afin d'ajouter la
transaction à la pile backstack gérée par l'activité et permet à l'utilisateur de revenir à l'état de fragment
précédent, en appuyant sur le bouton Retour.
41
• Le cycle de vie de l'activité dans laquelle vit le fragment affecte directement le cycle de vie du fragment, de sorte que
chaque rappel de cycle de vie pour l'activité entraîne un rappel similaire pour chaque fragment. Par exemple, lorsque
l'activité reçoit onPause (), chaque fragment de l'activité reçoit onPause ().
• Les fragments ont cependant quelques rappels de cycle de vie supplémentaires qui gèrent une
interaction unique avec l'activité afin d'effectuer des actions telles que créer et détruire l'interface
utilisateur du fragment.
• Le s rappels supplémentaires sont aussi affectés par les rappels de cycle de vie de l’activité. Par
exemple, lorsque l'activité a reçu son rappel onCreate (), un fragment de l'activité reçoit des
rappels jusqu’a onActivityCreated ().
• Une fois que l'activité a repris, vous pouvez librement ajouter et supprimer des fragments de
l'activité. Ainsi, ce n'est que lorsque l'activité est à l'état repris que le cycle de vie d'un fragment
peut changer indépendamment.
• Cependant, lorsque l'activité quitte l'état repris, le fragment est à nouveau poussé à travers son
cycle de vie par l'activité.
42
• Dans certains cas, vous pourriez avoir besoin d'un fragment pour partager
des événements ou des données avec l'activité
• L'idée est simple, toute activité qui souhaite recevoir les évènements d’un
fragment implémente une interface qui sera utilisée par le fragment pour
communiquer avec son conteneur.
• De l’autre coté, une activité connait les fragments qu'elle contient, elle
peut donc pointer directement sur eux.
45
• Par exemple, si une application d'actualités contient deux fragments dans une activité - un pour afficher une liste
d'articles (fragment A) et un autre pour afficher un article (fragment B) - alors le fragment A doit indiquer
l'activité lorsqu'un élément de liste est sélectionné afin qu'il peut dire au fragment B d'afficher l'article.
• Si l'activité n'a pas implémenté l'interface, le fragment lève une exception ClassCastException.
47
• L’activite communique et gére ses fragments en utilisant FragmentManager. Pour l'obtenir, appelez
getSupportFragmentManager () depuis votre activité.
• Obtenir des fragments de l'activité, avec findFragmentById () (pour les fragments qui fournissent une
interface utilisateur dans la présentation de l'activité) ou findFragmentByTag () (pour les fragments qui
fournissent ou non une interface utilisateur).
• Pop fragments hors de la pile arrière, avec popBackStack () (simulant une commande Retour par
l'utilisateur).
• Comme vu precedement, l’activite peut également utiliser FragmentManager pour ouvrir une
FragmentTransaction.
49
• Mémoriser les fragments sans en-tête pour gérer les changements de configuration.
Thank You
R e a d y f o r Yo u r
Questions