Informatique Mobile : Fiche 4

Transcription

Informatique Mobile : Fiche 4
Informatique Mobile : Fiche 4
Objectifs
-
Être capable d’installer une application à partir d’adb ;
Être capable de définir en xml une interface utilisateur complexe ;
Être capable d’ajouter un menu ;
Être capable de récupérer de l’information à partir d’une autre activité ;
Exercice
Nous allons enrichir notre application de gestion de joueurs de tennis :
-
en les présentant dans une liste déroulante
en permettant de modifier les données des joueurs.
Installation de l’application exemple
Pour vous montrer à quoi doit ressembler l’application, télécharger le fichier Fiche3.apk et installer le
à l’aide d’adb via la commande :
adb install Fiche4.apk
Changement du nom de l’application
Pour l’instant le titre de l’application est le nom du projet. Changeons cela.
Lorsque nous ouvrons le fichier androidManifest.xml nous remarquons que l’attribut android :label
porte le nom du projet. En réalité si nous cliquons dessus, nous voyons que cela fait référence à une
String portant l’id app_name.
Changez la valeur de la String à la source (dans values/strings.xml) par le titre que vous préférez pour
votre application.
Profitez-en pour changer le titre de l’activité JoueurDetails.
Mise en forme des détails du joueur
Nous allons transformer notre écran de présentation du joueur en un formulaire permettant de
changer son nombre de points.
Mais d’abord, donnant à cet écran un aspect plus sympathique. Voici une suggestion :
Nous ajouterons la photo par après. Pour réaliser cela, utilisez un GridLayout1. Attention, l’exemple
de Layout XML donné sur le site ne correspond pas tout à fait au snapshot d’écran qu’ils montrent. Il
faut introduire une colonne supplémentaire pour réaliser la séparation entre « Pays » et
« Serbie » cette colonne sera remplie par un tag <Space /> dont vous règlerez la largeur.
N’hardcodez pas les String, mais définissez-les dans le fichier de ressources String.xml. Mieux
encore : vous pouvez entrer les String dans le layout, puis les extraire vers le fichier ressources2.
Champs d’édition des points
Pour pouvoir éditer les points, transformez dans le XML le TextView qui les affiche en EditText.
Pas besoin de changer le code de l’initialisation de cette vue dans JouerDetailsActivity.onCreate() car
la classe EditText hérite de TextView.
Le champ ne sera éditable que sur demande, ajoutez-lui une propriété
android:enabled="false"
Ajout d’un menu « Edit »
Regarder sur le site d’Android comment l’on ajoute un bouton à la tool bar3. Ensuite rajouter un
bouton « Edit » avec son icône correspondant.
Pour ajouter l’icône, télécharger sur le site d’Android l’icône pack correspondant à Edit. Vous aurez
un zip file. Dézippez-le et vous verrez une série de répertoires représentant les différente résolutions
possibles pour l’icône :
1
Voir http://android-developers.blogspot.be/2011/11/new-layout-widgets-space-and-gridlayout.html
Voir http://envyandroid.com/android-studio-extract-strings-resources/
3
Voir http://developer.android.com/training/basics/actionbar/adding-buttons.html
2
Sélectionnez-les tous, copiez-les et coller-les dans le folder res de votre vue du projet. L’icône devrait
alors apparaître dans les ressources drawable. Si vous dépliez la ressource, vous verrez les différentes
résolutions.
Vous pouvez maintenant ajouter l’icône à l’item du menu via l’attribut android:icon.
N’oubliez pas de donner un id avec un nom parlant à votre item, style action_edit.
Testez votre programme.
Répondre à l’action « Edit »
Lisez la section « Respond to Action Button » dans la page
http://developer.android.com/training/basics/actionbar/adding-buttons.html.
Une fois que l’utilisateur aura appuyé sur le bouton « Edit » il pourra … éditer les points du joueur.
Pour ce faire, il vous faudra dans la méthode JoueurDetailsActivity.onOptionsItemSelected() :
-
détecter via l’id de l’item que Edit a été sélectionné
récupérer la vue correspondante à l’EditText (voir fiche précédente)
changer la propriété Enabled de l’EditText de true à false.
Ajout d’un bouton Sauver
Ajoutez un bouton « Sauver » sur l’écran, il ne devra être visible qu’en cas d’édition. Vous devez donc
mettre la propriété « visible » à false par défaut et la changer lors de la sélection de l’édition.
Réagir au touché du bouton
Il suffit d’ajouter un attribut onClick avec le nom du handler, tout comme nous l’avions fait dans la
fiche 2.
Retourner une valeur depuis une activité
Pour des raisons pédagogiques, nous avons décidé que si les points du joueur étaient modifiés, c’est
l’activité appelante (AfficherImageActivity) qui modifiera le modèle et non JoueurDetailsAcitivty.
Une fois que Save sera touché, il vous faudra donc dans JoueurDetailsActivity:
-
récupérer les points dans l’EditText
-
-
retourner un code indiquant que le joueur a été modifié (en effet il se pourrait que nous
quittions l’activité JoueurDetails sans appuyer sur save. L’activité appelante doit donc savoir
si elle doit modifier le joueur ou pas).
placer dans un intent la valeur des nouveaux points du joueur
quitter l’activité
Lisez ceci
http://developer.android.com/guide/components/activities.html#StartingAnActivityForResult
pour savoir comment lancer une activité pour obtenir un résultat (Ici c’est JoueurDetailsAcitivty qui
retourne un résultat et donc AfficherImageActivity qui lance l’activité et récupère le résultat.;
et ceci
http://stackoverflow.com/questions/26703691/android-return-object-as-a-activity-result
pour savoir comment placer des données dans l’Intent reçu en retour.
Pour quitter l’activité, utilisez la méthode finish().
Modifier le joueur dans le domaine
Dans l’activité appelante, vous devrez récupérez la valeur placée dans l’Intent de retour à l’aide de la
méthode getIntExtra()4.
Ensuite mettez à jour le joueur dans le domaine. Pour ce faire, charger la nouvelle version du
Domaine disponible sur l’eCampus et mettez à jour les fichiers.
Vous verrez que FinderJoueurDeTennis est maintenant obsolète ; utilisez FakeDAO à la place.
Testons un peu plus
Modifiez les points en mettant des caractères alphanumériques dans le champ Points et sauvez.
Que se passe-t-il ?
Corrigez l’erreur en contraignant les valeurs dans l’EditText à des nombres.
4
Voir
http://developer.android.com/reference/android/content/Intent.html#getIntExtra%28java.lang.String,%20int%
29