Apache Adobe Flex TutorialTutoriaux Adobe Flex & AIR en Français

14juin/114

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:

newc

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:

Télécharger le projet au format FXP

Remplis sous: Adobe Air || Taggé comme: , Laisser un commentaire

Articles similaires

Commentaires (4) Trackbacks (0)
  1. 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 ;-)

  2. 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

  3. 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 ?

  4. 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 :P ).
    Le stockage brut du ByteArray est plus difficile à mettre en place mais après avec une base en asynchrone, aucun risque de freeze :)

    Fabien


Leave a comment

(required)

Aucun trackbacks pour l'instant