Pour compléter l introduction

Documents pareils
Projet Android (LI260) Cours 2

TP au menu «UI ANDROID»

WEB page builder and server for SCADA applications usable from a WEB navigator

TP SIN Programmation sur androïde Support : eclipse

Once the installation is complete, you can delete the temporary Zip files..

Outils, langage et approche Android Une introduction. Nicolas Stouls lyon.fr

Warren PAULUS. Android SDK et Android x86

1.3 Gestion d'une application

Instructions Mozilla Thunderbird Page 1

lundi 3 août 2009 Choose your language What is Document Connection for Mac? Communautés Numériques L informatique à la portée du Grand Public

How to Login to Career Page

Les fondamentaux du développement d applications Java

Acronymes et abréviations. Acronymes / Abbréviations. Signification


WiFi Security Camera Quick Start Guide. Guide de départ rapide Caméra de surveillance Wi-Fi (P5)

Tutorial pour une application simple

Programmation Android L3 informatique

Alfstore workflow framework Spécification technique

Quelques outils pour le logiciel «Tux Paint»

SERVEUR DÉDIÉ DOCUMENTATION

Programmation mobile avec Android

Thank you for choosing the Mobile Broadband USB Stick. With your USB Stick, you can access a wireless network at high speed.

Quelques outils pour le logiciel «Tuxpaint»

Instructions pour mettre à jour un HFFv2 v1.x.yy v2.0.00

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Package Java.util Classe générique

Création d un service web avec NetBeans 5.5 et SJAS 9

Restaurant Application Quick Reference Guide

- TP Programmation Android - NFA024 Conservatoire National des Arts et Métiers

UML : Unified Modeling Language

Contents Windows

HSCS 6.4 : mieux appréhender la gestion du stockage en environnement VMware et service de fichiers HNAS Laurent Bartoletti Product Marketing Manager

1 ) INSTALLATION DE LA CONSOLE 2 2 ) PREMIER DÉMARRAGE DE LA CONSOLE 3 3 ) LES JOBS 4 4 ) LES ORDINATEURS 6

DOCUMENTATION - FRANCAIS... 2

Thank you for choosing the Mobile Broadband USB Stick. With your USB Stick, you can access a wireless network at high speed.

Exercices sur SQL server 2000

Tutoriel Android - TP de prise en main

Principe de TrueCrypt. Créer un volume pour TrueCrypt

Vanilla : Virtual Box

TP2 : Client d une BDD SqlServer

ArcScan Tutorial. Copyright Esri All rights reserved.

Tutoriel de formation SurveyMonkey

3615 SELFIE. HOW-TO / GUIDE D'UTILISATION

calls.paris-neuroscience.fr Tutoriel pour Candidatures en ligne *** Online Applications Tutorial

Programmer en JAVA. par Tama

Tutoriel Android. Pour démarrer la programmation d'applications Android

Ocs Inventory et GLPI s appuie sur un serveur LAMP. Je vais donc commencer par installer les paquets nécessaires.

Android et le Cloud Computing

Module Architecture des systèmes mobiles : Android première partie Didier FERMENT - UPJV

Java Licence Professionnelle CISII,

Comment Accéder à des Bases de Données MySQL avec Windows lorqu'elles sont sur un Serveur Linux

Android Publish/Subscribe, GCM, Google Cloud Messaging : une introduction

Compléter le formulaire «Demande de participation» et l envoyer aux bureaux de SGC* à l adresse suivante :

DOCUMENTATION - FRANCAIS... 2

Micro-ordinateurs, informations, idées, trucs et astuces utiliser le Bureau à distance

VTP. LAN Switching and Wireless Chapitre 4

GIGABIT PCI DESKTOP ADAPTER DGE-530T. Quick Installation Guide+ Guide d installation+

JES Report Broker. Campus Technologies. SAE de CHALEMBERT 1 Rue Blaise PASCAL JAUNAY-CLAN info@campustec.

USB 598. Quick Start Guide (Windows) Guide de démarrage rapide (Windows) USB Modem. Modem USB.

Cedric Dumoulin (C) The Java EE 7 Tutorial

1. Base de données SQLite

Supervision et infrastructure - Accès aux applications JAVA. Document FAQ. Page: 1 / 9 Dernière mise à jour: 15/04/12 16:14

ANGULAR JS AVEC GDE GOOGLE

Logitech Tablet Keyboard for Windows 8, Windows RT and Android 3.0+ Setup Guide Guide d installation

OUTIL DE TRAVAIL COLLABORATIF

Corrigés des premiers exercices sur les classes

Editing and managing Systems engineering processes at Snecma

Le No.1 de l économie d énergie pour patinoires.

Gestion des certificats en Internet Explorer

Génie Logiciel avec Ada. 4 février 2013

Contrôle d'accès Access control. Notice technique / Technical Manual

Lesson Plan Physical Descriptions. belle vieille grande petite grosse laide mignonne jolie. beau vieux grand petit gros laid mignon

Utiliser une WebCam. Micro-ordinateurs, informations, idées, trucs et astuces

Construire des plug-ins pour SAS Management Console SAS 9.1

3 Octobre Les Communautés MS

Insérer des images dans Base

Créer des applications Android

Sécurité relative aux sièges auto et aux rehausseurs

La base de données XML exist. A. Belaïd

Package Contents. System Requirements. Before You Begin

SOMMAIRE

APPENDIX 6 BONUS RING FORMAT

Auto-évaluation Programmation en Java

Adeunis-RF Softwares. Stand-Alone configuration Manager V2. User guide version V1 FRANCAIS ENGLISH

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

équipement radio Procédure

Développement Android. J.-F. Couchot

AMENDMENT TO BILL 32 AMENDEMENT AU PROJET DE LOI 32

Déploiement de SAS Foundation

Institut français des sciences et technologies des transports, de l aménagement

2010/2011 [PROJET TEXT TO SPEECH] Génie Logiciel des Interactions Homme-Machine. Germain Costenobel Pierre Barois

English version Legal notice

Fiche produit ifinance v4

Développement tablette Android. SophiaConf2011 Par Arnaud FARINE

Premiers Pas en Programmation Objet : les Classes et les Objets

1 Configuration des Fichiers Hosts, Hostname, Resolv.conf

Bases Java - Eclipse / Netbeans

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Transcription:

Pour compléter l introduction

Ajouts Retirer Par FragmentTransaction (et commit) Déplacement par tri des View générées Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 02 / 29

Il s agit de déplacer la vue liée au fragment Il faut donc le retrouver dans son parent, et le changer d indice Boucle for Car il manque : private View[] getchilds(viewgroup v) { View [] res = null; if (v!= null) { res = new View[v.getChildCount()]; for(int i = 0; i < res.length; i++) res[i] = v.getchildat(i); return res; Pour changer l indice, c est la méthode <ViewGroup>.addView( v, i) mais avant il faut l enlever Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 03 / 29

Caution: Your activity will be destroyed and recreated each time the user rotates the screen. When the screen changes orientation, the system destroys and recreates the foreground activity because the screen configuration has changed and your activity might need to load alternative resources (such as the layout). http://developer.android.com/training/basics/activity-lifecycle/recreating.html Re-créer => refaire des objets Pour les fragments, on s en sort car il y a le paramètres (et recréer avec ce même paramètre) Des fonctions peuvent être appelées avant destruction onsaveinstancestate pour une Activité onsaveinstancestate pour un fragment on peut y remplir le bundle Ne pas oublier l appel à super.xxx Méthode pour utiliser ce qui est sauvé oncreate(bundle saved) pour un fragment onrestoreinstancestate(bundle instate) pour une activité A faire évoluer en même temps que le code Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 04 / 29

Le tri des tâches : Comparable de java Enum de java C.f. cours POO s5 Puis gestion de la rotation (re remplir la liste de fragment, à partir de leur oncreate par un appel à leur activité) Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 05 / 29

Source de l image : «android programming, the big nerd ranch guide» Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 06 / 29

android programming, the big nerd ranch guide Appel Méthode setretaininstance(true) dans oncreate du Fragment Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 07 / 29

L attribut android:name attribute indique la classe qui extends Fragment Insertion de la View retournée par oncreateview() Note: chaque fragment nécessite un id (ou tag) Meilleur gestion par Android android:id attribute (unique) android:tag avec une string unique Les deux Une View fragment <fragment android:name= nom_complet_classe" android:id="@+id/le_id" etc. " /> Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 08 / 29

Comme un fragment Un peu particulier (dialog) Méthode show, pas de transaction Besoin de prévoir la communication (interface logicielle), notamment pour la valeur de retour Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 09 / 29

Portion de code Avec ou sans interface Réutilisable Instanciable en cours d éxécuction : FragmentTransaction (add / commit) Création Méthode statique (fabrique) Création d un Bundle à mettre en paramètre (setarguments) oncreate puis oncreateview (chargement du xml et personnalisation de la vue) Gestion de la rotation onsaveinstancestate (sauvegarde de valeur dans un bundle) oncreate (extraction des éléments sauvegardés dans le bundle) Attention, il y a deux bundles : celui en paramètre du oncreate (sauvegarde avant rotation) et getarguments (paramètre lors de la creation) Destruction : FragmentTransaction (remove / commit) Prévoir les interfaces et liaison pour utilisation faire communiquer votre Fragment avec le reste de l application Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 10 / 29

Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 11 / 29

Dossier menu dans res <menu xmlns:android="http://schemas.android.com /apk/res/android" > <item android:id="@+id/tri_buttoir" android:orderincategory="100" android:showasaction="never" android:title="@string/tri_buttoir"/> <item android:id="@+id/tri_creation" android:orderincategory="100" android:showasaction="never" android:title="@string/tri_creation"/> </menu> Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 12 / 29

http://developer.android.com/guide/topics/ui/menus.html <menu> Defines a Menu, which is a container for menu items. A <menu> element must be the root node for the file and can hold one or more <item> and <group> elements. <item> Creates a MenuItem, which represents a single item in a menu. This element may contain a nested<menu> element in order to create a submenu. <group> An optional, invisible container for <item> elements. It allows you to categorize menu items so they share properties such as active state and visibility. For more information, see the section about Creating Menu Groups. Pour la balise item : android:id A resource ID that's unique to the item, which allows the application can recognize the item when the user selects it. android:icon A reference to a drawable to use as the item's icon. android:title A reference to a string to use as the item's title. android:showasaction Specifies when and how this item should appear as an action item in the action bar. Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 13 / 29

Méthode pour la création dans une Activity @Override public boolean oncreateoptionsmenu(menu menu) { MenuInflater inflater = getmenuinflater(); inflater.inflate(r.menu.nom_du_fichier_xml, menu); return true; Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 14 / 29

Toujours dans une Activity @Override public boolean onoptionsitemselected(menuitem item) { // Handle item selection switch (item.getitemid()) { case R.id.un_id: // des actions return true; case R.id.un_autre_id: // des actions en réponse à cet item là return true; // et ainsi de suite default: return super.onoptionsitemselected(item); Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 15 / 29

V1 : pas de menu V2 : un menu «simple» V3 : aller dans une activité fille V4 : utiliser une activité (Intent) prédéfini Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 16 / 29

Fisheye, exemple de personnalisation d une View Intégration dans le xml <fisheye.four.image.defor mablepolygons [...] /> Surcharge de ondraw, utilisation de Paint Mise en place d un menu «simple» inflate du menu dans oncreateoptionsmenu onoptionsitemselected pour réagir aux actions Utilisation de invalidate() sur la vue pour la mettre à jouir Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 17 / 29

Autre écran = autre activité Attention au cycle de vie (détruit, pas détruit?) Création d une autre activité Déclaration dans le manifest (après l activité principale) <activity android:name="fisheye.four.settingsactivity" android:label="@string/title_activity_settings android:parentactivityname="fisheye.four.fisheye"> <meta-data android:name="android.support.parent_activity" android:value="fisheye.four.fisheye" /> </activity> Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 18 / 29

Méthode simple : startactivity(intent i) dans Activity Intent Objet de communication avec l OS Dans ce cas, constructeur new Intent(Context, Class) Context = activité qui lance Class = le type de l activité à lancer Exemple : Intent exo = new Intent(this, ExoScolaire.class); où this est l activité principale et ExoScolaire est aussi une activité putextra pour ajouter des données Dans le oncreate de la nouvelle activité getintent( ) getintent().getintextra("clef", val_defaut); Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 19 / 29

Lancement avec startactivityforresult Méthode setresult(code, intent) Avec un code de retour Avec un Intent (et des extra) Méthode de retour dans l activité qui a lancé protected void onactivityresult(int requestcode, int resultcode, Intent data) { if (data == null) return ; Date d = (Date) data.getserializableextra("date"); // etc. Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 20 / 29

android programming, the big nerd ranch guide android programming, the big nerd ranch guide Activité A APPLI Extra, etc. Activité B Extra, etc. Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 21 / 29

Affichage du bouton (dans la barre) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { getactionbar().setdisplayhomeasupenabled(true); Récupérer l event public boolean onoptionsitemselected(menuitem item) { switch (item.getitemid()) { case android.r.id.home: // etc. return true; Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 22 / 29

Appel à setresults Faire l Intent de retour (putextra pour les valeurs de retour) Quitter la vue avec finish Pas dans l esprit Mais l avantage de conserver l instance de l activité Interception du bouton «back» : public void onbackcalled() Utilisation du «up» L activité de départ repart quasiment de zéro Perte du onactivityresult Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 23 / 29

Activité qui lance Activité lancée // dans le if onoptionsitemselected if (item.getitemid() == R.id.reglages) { startactivityforresult(prefs.obtenirréglages(this), CODE_REGLAGES); Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 24 / 29

Activité qui lance // dans le if onoptionsitemselected if (item.getitemid() == R.id.reglages) { startactivityforresult(prefs.obtenirréglages(this), CODE_REGLAGES); L utilisateur «touche» le menu 1 Activité lancée Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 24 / 29

Activité qui lance // dans le if onoptionsitemselected if (item.getitemid() == R.id.reglages) { startactivityforresult(prefs.obtenirréglages(this), CODE_REGLAGES); L utilisateur «touche» le menu 1 Activité lancée en réponse, l activité est créée // création de la nouvelle activité protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_reglages); // récupération des paramètres dans l intent surnom = (EditText) findviewbyid(r.id.editsurnom); surnom.settext(getintent().getstringextra( Préférences.SURNOM )); // etc. 2 Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 24 / 29

Activité qui lance // dans le if onoptionsitemselected if (item.getitemid() == R.id.reglages) { startactivityforresult(prefs.obtenirréglages(this), CODE_REGLAGES); L utilisateur «touche» le menu 1 Activité lancée en réponse, l activité est créée // création de la nouvelle activité protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_reglages); // récupération des paramètres dans l intent surnom = (EditText) findviewbyid(r.id.editsurnom); surnom.settext(getintent().getstringextra( Préférences.SURNOM )); // etc. 2 // appui sur le bouton «back» @Override public void onbackpressed() { Intent i = new Intent(); // création et «remplissage» de l intent de retour i.putextra(préférences.surnom, surnom.gettext().tostring() ); i.putextra(préférences.serveur, serveur.gettext().tostring()); i.putextra(préférences.port, port.gettext().tostring()); // indication du la fin de cette actvité pour celle d origine setresult(activity.result_ok, i); // puis comportement «habituel» du bouton back super.onbackpressed(); 3 l utilisateur appuie sur «back» Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 24 / 29

Activité qui lance // dans le if onoptionsitemselected if (item.getitemid() == R.id.reglages) { startactivityforresult(prefs.obtenirréglages(this), CODE_REGLAGES); L utilisateur «touche» le menu 1 Activité lancée en réponse, l activité est créée // création de la nouvelle activité protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_reglages); // récupération des paramètres dans l intent surnom = (EditText) findviewbyid(r.id.editsurnom); surnom.settext(getintent().getstringextra( Préférences.SURNOM )); // etc. 2 @Override public void onactivityresult(int requestcode, int resultcode, Intent data) { if (requestcode == CODE_REGLAGES) { if (resultcode == Activity.RESULT_OK) { // traitement de l intent de retour boolean correct = prefs.reçoit(data); if (! correct) { // etc. le résultat est alors transmis à l activité initiale 4 // appui sur le bouton «back» @Override public void onbackpressed() { Intent i = new Intent(); // création et «remplissage» de l intent de retour i.putextra(préférences.surnom, surnom.gettext().tostring() ); i.putextra(préférences.serveur, serveur.gettext().tostring()); i.putextra(préférences.port, port.gettext().tostring()); // indication du la fin de cette actvité pour celle d origine setresult(activity.result_ok, i); // puis comportement «habituel» du bouton back super.onbackpressed(); 3 l utilisateur appuie sur «back» Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 24 / 29

Voir : https://speakerdeck.com/jgilfelt/this-way-up-implementing-effectivenavigation-on-android // pour «relancer» l activité parent Intent up = NavUtils.getParentActivityIntent(this); // éventuellement des valeurs de retours comme extra up.putextra(...); // retour à l activité, qui repasse par oncreate, mais qui // n a pas été tuée (pas de onrestoreinstancestate) NavUtils.navigateUpTo(this,up); // s il n y a pas de paramètre // NavUtils.navigateUpFromSameTask(this); Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 25 / 29

http://developer.android.com/training/implementing-navigation/ancestral.html if (NavUtils.shouldUpRecreateTask(this, up)) { // This activity is NOT part of this app's task, so create a new task // when navigating up, with a synthesized back stack. TaskStackBuilder.create(this) // Add all of this activity's parents to the back stack.addnextintentwithparentstack(up) // Navigate up to the closest parent.startactivities(); else { // This activity is part of this app's task, so simply // navigate up to the logical parent activity. NavUtils.navigateUpTo(this, up); Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 26 / 29

Pour «tuer» «Normalement réserver à l OS» finish() (+System.exit(0) ) Etc. Pour relancer l application au début à partir de là où on est : Dans le manifest, pour L activité ciblée android:launchmode="singletop Depuis l endroit où on veut revenir «au début» Intent intent = new Intent(this, LActivitéPrincipale.class); intent.addflags(intent.flag_activity_clear_top); intent.addflags(intent.flag_activity_new_task); startactivity(intent); Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 27 / 29

Reconnaissance de parole de google Intégrée à Android private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234; /** * Fire an intent to start the speech recognition activity. */ @Override public void onclick(view v) { // lancement de l'intent avec le nom de la classe... (constante) Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); // paramètre requis pour interprétation du résultat... intent.putextra(recognizerintent.extra_language_model, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); // titre intent.putextra(recognizerintent.extra_prompt, "Fisheye - Speech recognition"); // VOICE_RECOGNITION_REQUEST_CODE pour retrouver l'appel pour le résultat // nombre choisi par le développeur startactivityforresult(intent, VOICE_RECOGNITION_REQUEST_CODE); Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 28 / 29

protected void onactivityresult(int requestcode, int resultcode, Intent data) { // test si le retour est ok et si le retours vient bien de le reco vocale if (requestcode == VOICE_RECOGNITION_REQUEST_CODE && resultcode == RESULT_OK) { ArrayList<String> matches = data.getstringarraylistextra(recognizerintent.extra_results); // [ ] else { // un autre cas Philippe Renevier Gonin - L3 Informatique Parcours Miage - POO s6 - Fragment, Menu, Intents 29 / 29