AIR Mobile – Application Pokémon (8) – Navigation vers une autre vue par la méthode pushView
Le fonctionnel de notre première vue est maintenant terminé, on peut passer à la 2ème vue. Dans cette partie du tutorial, on va voir comment à la sélection d'un élément de la liste, on va pouvoir passer à la vue suivante en lui transmettant la donnée sélectionnée.
Pour une introduction à ces techniques, je vous conseille de lire ce tutorial:
AIR Mobile – Navigation entre les View : pushView, popView, …
Récupération de l'élément de liste cliqué
Première étape, on va capter l'interaction utilisateur et on va récupéré le pokémon cliqué. Pour cela, on va s'abonner à un évènement propagé par la liste qui indique un changement de sélection. Celui-ci est nommé "change":
protected function onChange(event:IndexChangeEvent):void{ } ]]> </fx:Script> ... <s:List width="100%" height="100%" dataProvider="{_dp}" labelField="nom" change="onChange(event)">
Pour récupéré l'élément sélectionné, on va récupérer la propriété "selectedItem" de notre liste. Pour l'instant, elle ne dispose pas de propriété "id", notre liste ne peut donc pas être référencée dans notre code ActionScript. Ajoutez-lui donc un id="list".
Notre élément sélectionné est de type Pokemon, nous en sommes sûr. On va donc récupérer la propriété et lui faire une conversion de type avec l'opérateur "as". Si la conversion de type échoue ou si aucun élément n'est sélectionné, on quitte la fonction.
Notez que dans notre cas, il est impossible que la propriété selectedItem soit "null" ou que l'objet ne soit pas de type Pokemon, c'est simplement pour vous montrer le genre de vérification qu'il faut en principe faire sur des applications plus complexes.
Voici le code à rajouter dans la méthode onChange:
protected function onListChange(event:IndexChangeEvent):void {
var selectedItem:Pokemon = list.selectedItem as Pokemon;
if (!selectedItem) {
return;
}
}
Création de la seconde vue
Avant de pouvoir naviguer vers la seconde vue, il faut la créer. Rendez-vous dans la partie "Package Explorer" de Flash Builder puis clic droit > New > MXML Component:
Donnez lui comme nom "PokemonDetailsView". Dans le cadre d'un projet mobile, Flash Builder a automatiquement sélectionné que vous vouliez hériter de la classe View. Gardez donc ce paramètre par défaut et cliquez sur Finish pour arriver sur le composant PokemonDetailsView.mxml.
Navigation vers la vue PokemonDetailsView
Retournez donc dans PokemonInfosHomeView.mxml et dans la méthode onChange, ajoutez l'instruction suivante:
navigator.pushView(PokemonDetailsView, selectedItem);
Ici, on indique que l'on veut naviguer vers la vue PokemonDetailsView, en lui passant comme donnée, notre variable selectedItem qui contient le pokémon sélectionné. Voilà, il n'en faut pas plus pour effectuer la navigation. Si vous testez votre projet, vous verrez que l'on passe bien sur une nouvelle vue qui a comme titre "PokemonDetailsView".
Pour l'instant, cette vue est vide, on va voir comment afficher les détails de notre pokémon dans la partie suivante.
Télécharger les sources
Vous pouvez télécharger le projet au format FXP tel qu'il est à la fin de cette partie:
Articles similaires
- AIR Mobile – Application Pokémon (9) – Affichage des informations de base dans la vue détail
- AIR Mobile – Les paramètres data et context de pushView
- AIR Mobile – Application Pokémon (6) – Filtrer la liste des pokémons avec un champ de recherche
- AIR Mobile – Application Pokémon (32) – Utilisation de requêtes SQL paramétrées
- AIR Mobile – Application Pokémon (17) – Afficher les évolutions du Pokémon (SQLite + navigation)
Aucun trackbacks pour l'instant







15 juin 2011
Je suis le tuto pour mon projet perso (un peu dans le même esprit test/formation utile) Pour le moment tout se passe bien.
Etant flexeur de profession, j'en profite pour ajouter une couche multi-plateformes (Une libraires pour le métier, Un projet air, Un projet mobile avec 2 launcher : Tablette et Phone)
Continue comme ça
15 juin 2011
Merci pour les encouragements, ça fait plaisir
. Il y a encore pas mal de tutos sur ce "fil rouge", 5 sont déjà rédigés.
Pour toute suggestion, tu peux me contacter sur gmail ou GTalk (voir en bas de page)
Thx,
Fabien
15 juin 2011
Tiens, j'aimerais avoir ton avis: je souhaite offrir la possibilité à mes utilisateurs d'ajouter leur propre Jeux (aka. Pokémon sur ton projet)
Ils auront notamment la possibilité d'ajouter une image, que je stockerai dans la BDD sqlite.
Toujours en pensant multi-plateforme quel est, selon toi, la meilleure solution entre stocker l'image en ByteArray ou l'encoder en Base64 ? Ou as-tu une autre idée ?
15 juin 2011
Perso, je ferai plus une insertion en BDD du ByteArray. Le problème avec le Base64, c'est que l'encodage / décodage est synchrone (à moins qu'il y ait de nouvelles lib?) et si tu fais un encode/decode en synchrone sur mobile, ça risque de freezer (non, en fait, ça va freezer
).
Le stockage brut du ByteArray est plus difficile à mettre en place mais après avec une base en asynchrone, aucun risque de freeze
Fabien