La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "Chapitre 4 Communication entre activités, Renvoyer et récupérer les données, ListViews et Adapters Azyat Abdelilah ENSAT GSEA3 2017/2018."— Transcription de la présentation:

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

2 Bibliographie https://perso.univ-rennes1.fr/pierre.nerzic/Android/semaine4.pdf http://lim.univ- reunion.fr/staff/epayet/Teaching/ProgMobiles_L3M1/L3/slides_Android _L3info.pdf http://lim.univ- reunion.fr/staff/epayet/Teaching/ProgMobiles_L3M1/L3/slides_Android _L3info.pdf https://developer.android.com/reference/android/app/ListActivity.html http://abhiandroid.com/ui/listview https://sipolytechnice.files.wordpress.com/2016/06/cours_2_androidint ro.pdf https://sipolytechnice.files.wordpress.com/2016/06/cours_2_androidint ro.pdf https://developer.android.com/reference/android/widget/ListView.html

3 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

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

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

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

7 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,

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

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

10 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,...

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

12 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);

13 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().

14 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,

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

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

17 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; } };

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

19 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... 40 45...

20 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])); }

21 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),... };

22 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); } }

23 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 ();

24 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

25 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é par @android:id/list, – 2. Créer un layout pour un item ; il doit contenir un TextView identifié par @android:id/text1,

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

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

28 Adapter

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

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

31 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,

32 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)

33 Example of listview using Array Adapter a list of countries http://abhiandroid.com/ui/listview

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

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

36 Example of listview using Array Adapter public class MainActivity extends Activity { // Array of strings... ListView simpleList; String countryList[] = {"India", "China", "australia", "Portugle", "America", "NewZealand"}; @Override 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

37 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

38 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 to @android:id/list ( NOT android:id="@+id/list" ).

39 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 to @android:id/list ( NOT android:id="@+id/list" ).

40 ListActivity: exemple public class ListViewAndroidExample extends ListActivity { TextView content; @Override 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 }

41 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,


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

Présentations similaires


Annonces Google