Android : L'interaction avec les appareils

Permettre la rotation d'écran

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Dans cette vidéo, vous découvrirez tout ce qui se passe lors d'une rotation d'écran. Apprenez ainsi maîtriser cette action.
09:43

Transcription

Dans cette vidéo, je vais vous apprendre à gérer les changements de configuration du téléphone qui provoquent une re-création de l'activité. Pour cela, je vais repartir du premier chapitre que j'ai un petit peu simplifié juste pour la lisibilité, mais vous, vous pouvez très bien repartir du premier projet. Ici, j'ai recréé un module que j'ai appelé « gestionrotation » Dans « activity_main », j'ai juste ma liste d'items et je vais pouvoir ajouter mes items. Ce que j'ai surtout enlevé, c'est dans la méthode « onCreate » il n'y a plus le jeu de données par défaut. Il va falloir les ajouter un par un. Je vais donc lancer mon projet. Je vais ajouter deux éléments, puis je vais effectuer une rotation d'écran. Et là, mes deux éléments ont disparu. Pourquoi ? Tout simplement parce que la configuration de mon téléphone a changé. Je ne suis plus en portrait mais en paysage. Donc, du coup, l'activité a continué son cycle de vie, est passée dans « onStop » « onDestroy » s'est détruite puis s'est relancée, donc est repassée dans « onCreate » « onStart » et « onResume ». Et j'ai également une nouvelle instance de ma classe Java. Cela se produit aussi si je change la langue du téléphone. Je vais dans les paramètres de mon téléphone et je vais passer mon téléphone en français. Du coup, mon téléphone est passé en français, je retourne sur mon écran et là, même chose pour la même raison. La configuration de mon téléphone a changé. Alors, comment faire pour éviter ce problème ? Plusieurs solutions, la première, la plus facile : je vais aller dans l' « AndroidManifest » et dans mon application, si je veux que ce soit sur toute l'application ou dans mon activité, si c'est uniquement pour cette activité, je vais ajouter l'attribut « configChanges » et je vais lui donner « Orientation ». Sauf que, quand je change l'orientation de mon téléphone, je change l'orientation, je passe de portrait à paysage, ou de paysage à portrait, mais aussi, je change la taille de mon écran car au final, je change la largeur et je change la hauteur. Il faut donc aussi utiliser « screenSize ». Je peux aussi utiliser « local » si je veux gérer le changement de langue. Donc là, je relance mon application, j'ajoute un élément, je fais une rotation, ma rotation est gérée. Je ne suis pas repassé dans « onCreate ». La limitation de cette méthode, c'est que, comme je ne repasse pas dans « onCreate », je ne prends pas en charge la nouvelle configuration. C'est-à-dire qu'imaginons que j'ai deux « layouts » différents, un pour le portrait et un pour le paysage, si j'indique cette version, le fait de passer de portrait à paysage ne repassera pas dans « onCreate » et comme ça n'y repasse pas je ne vais pas charger le nouveau « layout », celui qui est propre aux paysages. Même chose pour la langue. C'est-à-dire que si mon application est en anglais, je sors, je la change, je la mets en français, je reviens, comme mon activité ne va pas être rechargée, mon application apparaîtra toujours en anglais. Quand je vais changer d'activité, que je vais la détruire et du coup la recréer, là, elle apparaîtra en français. Cette solution revient simplement à éviter le problème mais elle gère un grand nombre de cas. Si, justement, j'ai besoin de prendre en compte la nouvelle configuration, mais que je veux sauvegarder mes données. Dans ce cas-là, on va voir que le cycle de vie de notre activité prévoit deux méthodes : « onSaveInstantState », attention, il y en a deux, c'est celle qui ne prend qu'un paramètre et « onRestoreInstantState », même chose, attention il y en a deux, donc celle qui n'a qu'un paramètre. La première va être appelée uniquement si l'activité est détruite pour être créée dans le cas de changement de configuration du téléphone. Et « onRestore » sera, à l'inverse, au moment où l'activité est recréée, elle va nous servir à récupérer les informations. Donc « onSave » pour sauvegarder, « onRestore » pour récupérer. Nous pouvons nous passer de « onRestore » car, en fait, le paramètre qu'on a ici est le même que celui qu'on a ici. « outState » représente le « bundle », c'est dans cet objet qu'on va sauvegarder nos informations et, lui, il va nous les rendre soit ici, soit ici, en fonction de si on veut de si on veut utiliser « onRestore », ou pas. Pour simplifier, ici, je ne vais pas utiliser « onRestore ». Je vais donc sauvegarder ma liste, je vais faire « outState.put » et là, dans les propositions, il n'y aura pas le typage « ArrayList », il y a « parcelableArrayList » donc une « ArrayList » de « parcelable », « ArrayList » de « string », « ArrayList » d' « Integer » de « Boolean » ou de type primitif. Il n'y a pas l'« ArrayList » de ça réalisable. Ici, pas le choix, je suis obligé de faire en sorte que mon événement implémente « parcelable ». Je vais donc aller dans mon événement et je vais pouvoir le rendre « parcelable » soit je le fais à la main, soit je peux utiliser un site qui le fait pour moi. Donc, je vais utiliser le site PARCELABLER. Je vais prendre ma class Evenement, je lui donne, je choisis mes champs et je « build ». Ici, il faut faire attention car il n'aime pas le constructeur, je ne sais pas vraiment pourquoi. Il ne gère pas aussi, si on écrit plusieurs paramètres sur la même ligne, par exemple, si j'avais écrit « url» ici. Je fais « build » et là, il me génère la classe. Donc, il m'a ajouté « implements Serializable » donc, ici, attention, parce que nous avons enlevé le constructeur. Que m'a-t-il rajouté ? Il m'a ajouté tout à la fin un constructeur, une méthode qui n'a pas grand intérêt, un méthode qui va permettre d'écrire dans la parcelle et pareil, une deuxième méthode qui n'a pas grand intérêt. Je rajoute donc ces quatre méthodes. Ici, les deux méthodes qui ont un intérêt, c'est le constructeur qui nous donne une parcelle à partir de laquelle on recrée l'objet et « writeToParcel » qui justement nous donne une parcelle et on lui dit comment écrire l'objet. Donc ici, il y a un certain ordre. Pourquoi a-t-on eu besoin de faire cela ? Tout simplement, parce qu' « implement parcelable » est plus optimisé qu' « implement serializable ». Si jamais vous avez à écrire une liste de beaucoup d'éléments, il ira plus vite dans le changement d'écran grâce à « parcelable » c'est pour cela qu'il impose le « parcelable », c'est une question de performance. Donc, maintenant que mon objet est « parcelable », je vais pouvoir utiliser « putParcelableArrayList ». Je vais lui donner une clé « maList » virgule et je lui transmets mon « ArrayList » que j'ai appelée « evenementArrayList ». Je lui transmets ma liste et, ici, au moment de recréer l'activité, je vais pouvoir détecter « savedInstanceState » donc si c'est différent nul, je vais pouvoir dire que mon « arrayList » est égale à « savedInstanceState.get ParcelableArrayList » et je lui redonne la même clé. Donc, pour être plus propre, il faut créer une variable statique. Donc, soit je réutilise la liste que j'avais sauvegardée, soit j'en crée une nouvelle. Je peux donc re-tester, j'ai donc bien désactivé dans l'« AndroidManifest », la gestion de la rotation, ou plutôt l'annulation de la rotation, je relance, je crée un événement, je fais une rotation et mon événement est toujours là. Je suis donc bien passé dans « onCreate », il suffit de mettre un « toast » pour vérifier et on va en mettre un dans « onSaveInstanceState ». Je relance, je passe dans « onCreate » j'ajoute mon élément, une rotation, je suis passé dans « onSaveInstanceState », puis dans « onCreate » et j'ai bien récupéré ma liste. Voilà, vous savez comment gérer les changements de configuration du téléphone.

Android : L'interaction avec les appareils

Exploitez les outils mis à disposition par le kit de développement Android. Améliorez l’expérience utilisateur de vos applications​ mobiles​ avec les composants et les animations.

1h58 (23 vidéos)
Aucun commentaire n´est disponible actuellement
 

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !