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