Le 14 septembre 2017, nous avons publié une version actualisée de notre Politique de confidentialité. En utilisant video2brain.com vous vous engagez à respecter ces documents mis à jour. Veuillez donc prendre quelques minutes pour les consulter.

Java pour les développeurs Android

Tirer parti d'un objet anonyme

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Apprenez à intercepter le clic sur une ligne de votre RecyclerView à l'aide d'un objet anonyme. Puis, vous réaliserez une petite animation.
08:11

Transcription

Dans cette vidéo, nous allons voir comment intercepter un clic sur notre Recycler View et donc sur une personne. Première étape : intercepter le clic sur une personne. Nous allons donc nous retrouver dans la class PersonneAdapter c'est là où on gère les lignes. Ici, dans le ViewHolder, nous avons nos TextView. Pour intercepter le clic sur toute la ligne, nous allons ouvrir notre fichier xml d'une personne et nous allons donner un Id au composant principal. Je vais l'appeler Root pour indiquer que c'est le composant principal. Je vais créer un pointeur vers ce composant. Ici, ce qui nous intéresse, c'est que ce soit un composant graphique, pas que ce soit un LinearLayout, un RelativeLayout, un TextView ou autre. Tout ce qu'on veut c'est que ce soit un composant graphique donc on va l'appeler View root TextView hérite de View Bouton hérite de View et ainsi de suite. Il suffit d'aller voir : TextView extends View Ici, nous allons donc récupérer notre composant et FindViewById retourne un pointeur vers une vue, n'importe laquelle. Ici, inutile de faire un cast parce que tout ce qui nous intéresse, c'est de ne récupérer qu'une vue. Pourquoi une vue ? Tout simplement parce que la méthode OnClickListener qui permet d'intercepter les clics est propre à View et non à TextView ou à Bouton. Il suffit d'aller la chercher dans la classe View. Maintenant que j'ai mon pointeur vers mon composant principal de ma ligne, à chaque fois que je vais afficher une ligne, je vais m'abonner à son clic : holder.root.setOnClickListener voilà, le fait d'écrire cela, je vais pouvoir m'abonner à chaque ligne. Pour rappel, il y a entre 10 et 20 lignes, ce qui fait que, quand je vais me balader dans ma liste, mon abonnement va changer, je m'abonnerai à différentes lignes et me désabonnerai au passage. Habituellement, je vous dis d'écrire This pour représenter la class PersonneAdapter On clique dessus, Alt + Entrée dire que PersonneAdapter implémente OnClickListener J'ai la méthode OnClick, voilà je sais que j'ai cliqué. Le problème c'est qu'ici, je me retrouve avec quoi ? Avec le composant sur lequel j'ai cliqué, à savoir mon LinearLayout Ici, ce n'est pas très pratique parce que j'ai mon LinearLayout mais je ne sais pas sur qui j'ai cliqué. Je peux aller chercher à l'intérieur du LinearLayout, retrouver le TextViewNom, à partir du TextViewNom, récupérer le texte qui est à l'intérieur et parcourir toutes mes personnes pour retrouver la personne qui a le même nom et le même prénom sauf que si j'ai deux personnes qui ont le même nom et même prénom, je ne peux pas savoir sur laquelle j'ai vraiment cliqué. Cette fois-ci nous allons donc utiliser la deuxième façon de s'abonner à OnClickListener. La première est de faire en sorte que la classe courante implémente l'interface OnClickListener et la deuxième est de passer par une class anonyme, c'est-à-dire que je vais écrire NewOnClickListener On va créer une class dont le seul intérêt est d'implémenter OnClickListener. Voilà donc j'ai créé une class anonyme c'est-à-dire que cette classe n'est valable que dans cette partie-là et elle n'a qu'une méthode celle que demande OnClickListener. Ici, à chaque fois que je vais cliquer, j'interviendrai dans ce morceau de code. Juste, pour bien comprendre : ici, j'ai ma personne, si je fais personneBean.setAge et que je lui donne 10, je vais avoir cette instruction-là qui est exécutée. Si c'est un élève, je vais avoir tout cela, je vais lui mettre 10 et admettons qu'ici, je vais lui mettre 12. Ce morceau de code-là sera exécuté au moment où on doit afficher la ligne. Par contre, ce morceau de code-là sera exécuté au moment où on affiche la ligne. Ce qui fait que, si ici, je crée un Toast et que je marque personneBean.getAge j'obtiendrai la valeur 10 parce que cette ligne-là représente juste un abonnement, je m'abonne au clic mais l'action qui sera effectuée au moment du clic ou les actions, s'il y a plusieurs clics, ne seront exécutées qu'au moment du clic. Je vais exécuter toutes ces instructions, cette instruction, m'abonner, ne pas faire le OnClick, afficher mon Toast donc ma personne aura toujours 10 ans. Au moment où je vais cliquer, je ne vais exécuter que cette partie-là donc je ne vais pas refaire mon Toast donc je n'aurai pas de Toast qui apparait. Si je veux refaire un Toast, il faudra que je remette un deuxième Toast ici. J'espère que c'est clair. Revenons à notre class anonyme. Quel est l'intérêt de faire une class anonyme ? C'est que dans cette class, comme mon abjet anonyme est entre cette accolade et cette accolade-là, j'ai accès au pointer vers personneBean. Ici, je peux faire un Toast. Le premier argument du Toast, c'est le contexte. Pour rappel, habituellement je vous dis de mettre This car This représente la class courante, à savoir jusqu'à présent MainActivity. Or, ici, nous ne sommes pas dans la class MainActivity, nous allons donc devoir récupérer le contexte autrement. Chaque composant graphique possède un pointeur vers un contexte. Je vais donc prendre n'importe quel composant graphique et faire un .getContext Voilà. Expliquons maintenant le final. Ici, si je laisse ma souris sur le Holder, une petite pop-up m'indique que le Holder doit être déclaré Final. Pourquoi ? Tout simplement parce qu'entre le morceau de code qui est ici, qui sera exécuté à chaque affichage de la liste et le morceau de code qui est à l'intérieur et qui ne sera exécuté qu'au moment du clic, mon pointeur Holder peut avoir changé. C'est-à-dire qu'ici, si je m'amuse à faire Holder = null j'ai changé le pointeur de mon holder, sauf que ce morceau de code-là sera exécuté plus tard. Pour pallier cela et pour éviter ce genre d'erreur, Java impose de mettre le pointeur en final donc ici je vais rajouter le mot-clé Final Le fait de l'avoir mis en Final, je ne peux plus le modifier. Maintenant si je m'amuse à faire Holder = null il m'indique que la variable a été assignée en Final et ne peut donc plus être modifiée, je ne peux plus réassigner mon pointeur. Même chose pour Personne. Pour pouvoir l'utiliser ici, il faut qu'il soit déclaré en Final. Attention, cela ne m'empêche pas de modifier le contenu de ma personne, de changer son prénom et son prénom par exemple. Ce qui ne doit pas changer c'est le pointeur, le pointeur doit toujours pointer vers la même personne. Testons maintenant si le clic fonctionne. J'ajoute un élève et je clique dessus. SI je change le nom, que j'ajoute un enseignant, je clique, c'est bon ! On a réussi à intercepter la personne sur laquelle on a cliqué. Je vais vous donner une petite astuce pour améliorer le rendu de votre application. Pour cela, on va aller dans le fichier qui représente notre ligne. On va ajouter, sur le composant où on intercepte le clic : background ? selectItemBackground Globalement, qu'est-ce que cela veut dire ? Ici, je demande à utiliser un des thèmes proposés par le SDK qui est le thème Composants graphiques cliquables. J'applique donc à l'arrière-plan de mon LinearLayout le thème Composant cliquable. Ce qui fait que lorsqu'on clique sur une ligne, on a la petite animation qui indique qu'on a cliqué. Voilà, vous savez maintenant comment récupérer le pointeur de la personne sur laquelle on a cliqué avec un Recycler View.

Java pour les développeurs Android

Prenez en main la syntaxe et les concepts de Java pour vos développements d’applications pour Android. Abordez les variables, les chaînes de caractères, les conditions, etc.

7h01 (65 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Votre/vos formateur(s) :
Date de parution :24 avr. 2017
Durée :7h01 (65 vidéos)

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 !