Chapitre 4 Communication entre activités, Renvoyer et récupérer les données, ListViews et Adapters Azyat Abdelilah ENSAT GSEA3 2017/2018.

Slides:



Advertisements
Présentations similaires
Le débogage Semaine 12 Version A15. Plan de leçon - Débogage  Commentaire javadoc  Définition  Fonctionnement  Point d’arrêt  Exécution  Contrôler.
Advertisements

Commerce électronique Automne  Introduction  Création du panier d’achats  Migration du panier d’achats  Conclusion.
Utiliser CERNBox pour sauvegarder, regarder et partager vos fichiers depuis n'importe quel navigateur Web. Quiconque a un compte CERN NICE dispose d'un.
Outils logiciel pour la programmation en C. 2 Automatiser la compilation : make make est un utilitaire présent dans toute les distribution de linux >
L'image: Le codage des images BacPro SEN Lycée Condorcet.
Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 1 TD 6 IJA Structures de données JAVA.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
Utilisation du logiciel EduStat © Construire une épreuve.
Tableaux en C Mardi 2/05.
Le Langage JavaScript pour le web
Langages de programmation TP6
Utilisation du logiciel EduStat©
Synthèse TP 2 Codeblock 1 Les objectifs de ce tp sont :
I- ANALYSE DU BESOIN / Plan
Exploitation de logiciels :
Modèle objet : les classes
java : l'héritage (rappel)
Environnement de développement des BD
Structure et Services « STS » Menu Structures : Divisions
Environnement du développement de BD ORACLE REPORTS 10g
Pas de variable globale
Les notions de classe et d'objet
JavaScript.
Numérisation partielle
Présentation du site
Javadoc et débogueur Semaine 03 Version A17.
I21 Algorithmique et programmation II
Principes de programmation (suite)
11ième Classe (Mardi, 18 novembre) CSI2572
Les fonctions.
Les fonctions.
Développement JAVA pour plateforme ANDROID
Langages de programmation TP10
Développement Mobile : Android
PROGRAMMATION INFORMATIQUE D’INGÉNIERIE II
Programmation en C++ C++ de base
Modélisation avec UML 2.0 Partie II Diagramme de classes.
Programmation Orientée Objet C# El Akel Bouchra ISMONTIC Tanger 2013/2014.
Programmation Android Communication entre composants
Type Concret – Type Abstrait
Calcul Scientifique Initiation à SCILB
Message Oriented Middleware MOM - Beghdad abdelkrim -abass youcef.
Programmation Android Première application Android
Programmation Android GUI (widgets) et ressources
CountrySTAT / FENIX Aperçu globale de l’Editeur DSD dans la nouvelle plateforme CountrySTAT FORMATION DES POINTS FOCAUX SUR LE SYSTEME CountrySTAT/FENIX.
Programmation Android Composantes d’une application
Les classes et les objets
Programmation Android Les listes
Messagerie (Orange - Gmail)
STS Web Services libres Gérer les services libres
Atos, Atos et le poisson, Atos Origin et le poisson, Atos Consulting ainsi que le poisson seul sont des marques déposées d'Atos Origin SA. © 2006 Atos.
Principes de programmation (suite)
Programmation Scratch
Tableaux Cours 06.
LISTES.
Présentation Chaînage dynamique Retour sur les tableaux
Listes Chaînées.
STREAMS (et fichiers).
Lecture/Écriture de fichiers (I/O)
Présentation du site Martine Cochet.
1. 2 TABLEUR: Calc mars 19 Myriam Boullanger - Bureautique - Calc Suite Gratuite Libre Office Dans le navigateur (Internet Explorer, Google Chrome, FireFox,…),
Structure de données Les listes.
Bases de données Singleton pour la connexion
App Inventor trucs Afficher une image depuis le Web ou Google Drive.
DONNÉE DE BASE QM Manuel de formation. Agenda 2  Introduction  Objectif de la formation  Données de base QM: Caractéristique de contrôle Catalogue.
Comment aller plus loin avec Zotero? Comité d’Aide à la Publication, FMT Zotero worshop Hand’s on session Zotero worshop Hand’s on session 12h-12h30.
LINQ. LINQ (Language-Integrated Query) est une nouveauté du.NET Framework 3.5 C’est le nom d’un ensemble de technologies basé sur l’intégration de fonctions.
Support de formation Administrateur Compétences
Android Avancé Module I Graphisme dynamique 1 Michel Poriaux - HEPH Condorcet.
Transcription de la présentation:

Chapitre 4 Communication entre activités, Renvoyer et récupérer les données, ListViews et Adapters Azyat Abdelilah ENSAT GSEA3 2017/2018

Bibliographie reunion.fr/staff/epayet/Teaching/ProgMobiles_L3M1/L3/slides_Android _L3info.pdf reunion.fr/staff/epayet/Teaching/ProgMobiles_L3M1/L3/slides_Android _L3info.pdf ro.pdf ro.pdf

Sommaire Fonctionnement d'une application Intents et autres informations Déclarer des intentions Lancement sans attente Transfert de données entre activités Lire ou envoyer les données envoyer/recevoir un bundle Communication entre activités A et B ListViews et Adapters ListActivity

Fonctionnement d'une application Au début, le système Android lance l'activité qui est marquée: action=MAIN et catégorie=LAUNCHER dans AndroidManifest.xml. Ensuite, d'autres activités peuvent être démarrées. Chacune se met devant les autres comme sur une pile.

Fonctionnement d'une application Deux cas sont possibles : – La précédente activité se termine, on ne revient pas dedans. Par exemple, une activité où on tape son login et son mot de passe lance l'activité principale et se termine. – La précédente activité attend la fin de la nouvelle car elle lui demande un résultat en retour. – Exemple : une activité de type liste d'items lance une activité pour éditer un item quand on clique longuement dessus, mais attend la fin de l'édition pour rafraîchir la liste.

Autres informations Les intentions peuvent se spécifier ; on peut leur rajouter des informations : – Une catégorie : LAUNCHER (pour les activités présentes dans le lanceur Android), DEFAULT ou ALTERNATIVE. – Un type MIME : indique le type de la ressource (comme pour les mails). – Un composant : indique la classe d'activité censée recevoir l'intention. Cette méthode n'est pas la plus heureuse, car elle fige l'activité associée. Soit vous l'avez codée vous-même, dans ce cas, c'est naturel, sinon, l'utilisation des autres paramètres est préconisée. – Des « extras » : un bundle d'informations permettant de transférer des données à l'activité cible.

Déclarer des intentions Les déclarations se déclarent dans le fichier manifest.xml de l'application. une activité doit ainsi déclarer les intentions auxquelles elle souhaite répondre,

Déclarer des intentions Un autre exemple plus utile est la déclaration d'une intention qui n'est pas main launcher :

Lancement sans attente Rappel, pour lancer Activ2 à partir de Activ1 : Intent intent = new Intent(this, Activ2.class); startActivity(intent);

Transfert de données entre activités Un Intent contient l'action et éventuellement des données complémentaires. Le composant qui crée l'Intent peut y ajouter des données avec la méthode surchargée putExtra(). Les données supplémentaires sont des paires clé/valeur, la clé est toujours une chaîne. En valeur, vous pouvez utiliser les types de données primitifs (int, float,..) ainsi que les types String, Bundle,...

Lire ou envoyer les données extra data méthodes putExtra ("clef", "valeur") pour envoyer les données dans l'intention: – putExtra (String name, String value), – putExtra (String name, int value), – et tous les autres formats possibles... Exemple: i.putExtra("MaClef", "MaValeur"); avec i l'instance de l'intention.

envoyer/recevoir un bundle Les bundles sont comme une liste d'objets, cette liste se composant d'un ensemble de couples clef/valeur; Exemple Bundle bundleExtras = new Bundle(); extras.putInt("id", 10); bundleExtras.putString("nom", “Karim”); //Attachons le bundle à l'intent i.putExtras(bundleExtras);

Communication entre activités A et B 1.L’activité A lancera l’activité B avec la méthode startActivityForResult(…), au lieu d’utiliser la méthode classique startActivity(…). 2.L’activité B recevra le paramètre passé grâce à l’Intent. 3.L’activité B avant de se terminer, utilisera la méthode setResult() pour retourner un paramètre à l’activité A. 4.Finalement, l’activité A recevra le résultat en utilisant une callback onActivityResult().

Exercice Donner les programmes java pour envoyer et recevoir des informations (par exemple; « le message envoyé par l’activité 1 ») en affichant le message sur l’activité 2,

ListViews et Adapters Au sein d'un layout, on peut implanter une liste que l'on pourra dérouler si le nombre d'éléments est important. Si l'on souhaite faire une liste plein écran, il suffit juste de poser un layout linéaire et d'y implanter une ListView.

ArrayList On veut programmer une application pour afficher et éditer une liste d'items. – la liste est stockée dans un tableau dynamique appelé ArrayList ; L'écran est occupé par un ListView. C'est une vue spécialisée dans l'affichage de listes quelconques.

Représentation des items par une classe Pour commencer, une classe pour représenter les items : public class Filiere { public String mNom; public int mNbreEtudiant; Filiere (String nom, int nbetdiants) { mNom = nom; // nom de la filiere mNbreEtudiant= nbetdiants; // nombre d’étudiants } public String toString() { return mNom; } };

Données Deux solutions pour initialiser la liste avec des items prédéfinis : 1.Un tableau dans les ressources, 2.Un tableau Java,

Données dans les ressources (1) Deux solutions pour initialiser la liste avec des items prédéfinis : 1.Un tableau dans les ressources; On crée deux tableaux dans le fichier res/values/arrays.xml : GSEA G3EI

Données dans les ressources (2) Deux solutions pour initialiser la liste avec des items prédéfinis : 1.Un tableau dans les ressources; on récupère ces tableaux pour remplir le ArrayList : // accès aux ressources Resources res = getResources(); final String[] noms = res.getStringArray(R.array.noms); final int[] nbEtudiants = res.getIntArray(R.array. nbEtudiants); // recopie dans le ArrayList mListe = new ArrayList (); for (int i=0; i<noms.length; ++i) { mListe.add(new Filiere(noms[i], nbEtudiants[i])); }

Données Deux solutions pour initialiser la liste avec des items prédéfinis : 2. Un tableau Java comme ceci : final Filiere[] initdata = { new Filiere("GSEA", 40), new Filiere("G3EI", 45), new Filiere("GIL", 80),... };

Copie de données dans un ArrayList L'étape suivante consiste à recopier les valeurs initiales dans un tableau dynamique de type ArrayList : protected ArrayList mliste; void onCreate(...) {... // création du tableau dynamique mListe = new ArrayList (); // boucle améliorée Java7 for (Filiere filiere: initdata) { mListe.add(filiere); } }

Container Java ArrayList C'est un type de données générique, c'est à dire paramétré par le type des éléments mis entre ; ce type doit être un objet. Quelques méthodes utiles : – liste.size() : retourne le nombre d'éléments présents, – liste.clear() : supprime tous les éléments, – liste.add(elem) : ajoute cet élément à la liste, – liste.remove(elem ou indice) : retire cet élément – liste.get(indice) : retourne l'élément présent à cet indice, – liste.contains(elem) : true si elle contient cet élément, – liste.indexOf(elem) : indice de l'élément. import java.util.ArrayList; ArrayList liste = new ArrayList ();

Affichage de la liste Deux possibilités : – classe ListActivity, – classe Activity de base. Ces deux possibilités sont très similaires : un layout contenant un ListView pour l'activité, un layout pour les items de la liste et un adaptateur pour accéder aux données. La ListActivity prépare un peu plus de choses pour gérer les sélections d'items, tandis qu'avec une simple Activity, c'est à nous de tout faire

Affichage de la liste: Mise en œuvre Que ce soit avec une ListActivity ou avec une Activity de base, deux choses sont à faire : – 1. Créer un layout pour l'écran ; il doit contenir un ListView identifié – 2. Créer un layout pour un item ; il doit contenir un TextView identifié

Layout de l'activité pour afficher une liste ListView+TextView Exemple;

Layouts prédéfinis Android contient des layouts pour des éléments de listes simples : – android.R.layout.simple_list_item_1; C'est un layout qui ache un seul TextView. Son identifiant est android.R.id.text1, – android.R.layout.simple_list_item_2; C'est un layout qui affiche deux TextView : un titre en grand et un sous-titre. Ses identifiants sont android.R.id.text1 android.R.id.text2. – Il suffit de les fournir à l'adaptateur. Il n'y a pas besoin de créer des fichiers XML, ni pour l'écran, ni pour les items.

Adapter

Il va chercher les données et instancie le layout d'item avec les valeurs. C'est une classe qui : – accède aux données à l'aide de méthodes telles que getItem(int position), getCount(), isEmpty() quelque soit le type de stockage des éléments : tableau, BD. – crée les vues d'affichage des items : getView(...) à l'aide du layout des items. Cela consiste à instancier le layout ; on dit expanser le layout, inflate en anglais.

Adapter Un ListView affiche les items à l'aide d'un adaptateur (adapter)

Adaptateurs prédéfinis Android propose quelques classes d'adaptateurs prédéfinis, dont : – ArrayAdapter pour un tableau simple (liste dynamique), – SimpleCursorAdapter pour accéder à une base de données,

ArrayAdapter pour les listes Il permet d'afficher les données d'un ArrayList, mais il est limité à une seule chaîne par item, par exemple le nom d'une planète, fournie par sa méthode toString(). Son constructeur : ArrayAdapter(Context context, int item_layout_id, int textview_id, List données) Context: c'est l'activité qui crée cet adaptateur, mettre this item_layout_id: identifiant du layout des items, p. ex. android.R.layout.simple_list_item_1 ou R.layout.item_filiere textview_id: identifiant du TextView dans ce layout, p. ex. android.R.id.text1 ou R.id.item_filiere_nom, Données: c'est la liste contenant les données (List est une surclasse de ArrayList)

Example of listview using Array Adapter a list of countries

Example of listview using Array Adapter Step 1: create a ListView in LinearLayout

Example of listview using Array Adapter Step 2: Creating a new activity name Listview and below is the code of activity_listview.xmlxml

Example of listview using Array Adapter public class MainActivity extends Activity { // Array of strings... ListView simpleList; String countryList[] = {"India", "China", "australia", "Portugle", "America", protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); simpleList = (ListView)findViewById(R.id.simpleListView); ArrayAdapter arrayAdapter = new ArrayAdapter (this, R.layout.activity_listview, R.id.textView, countryList); simpleList.setAdapter(arrayAdapter); } Step 3: using ArrayAdapter to display the country names in UI

ListActivity Créer une instance de ListActivity, qui intègre automatiquement : – une vue, instance de la classe ListView – un adaptateur, instance d’une implémentation de ListAdapter

ListActivity: exemple activity_list_view_android_example.xml File NOTE : When creating Listview with ListActivity then two things are MUST contain a ListView with the android:id attribute set ( NOT ).

ListActivity: exemple activity_list_view_android_example.xml File NOTE : When creating Listview with ListActivity then two things are MUST contain a ListView with the android:id attribute set ( NOT ).

ListActivity: exemple public class ListViewAndroidExample extends ListActivity { TextView protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list_view_android_example); content = (TextView)findViewById(R.id.output); //listView = (ListView) findViewById(R.id.list); String[] values = new String[] { "Android Example ListActivity", "Adapter implementation", "Simple List View With ListActivity", "ListActivity Android", "Android Example", "ListActivity Source Code", "ListView ListActivity Array Adapter", "Android Example ListActivity" }; ArrayAdapter adapter = new ArrayAdapter (this, android.R.layout.simple_list_item_1, values); setListAdapter(adapter); // Assign adapter to List }

Exercice 2 1.Ecrire un programme java pour afficher les matières de la 1ère année GSEA1 à l’aide d’une Listview et Adapter, 2.Ecrire un programme java pour afficher les montage fondamentaux d’un AOP en utilisant une ListActivity,