IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants graphiques Android Discussion :

Peupler ListView (sans ListActivity) depuis SQLite


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut Peupler ListView (sans ListActivity) depuis SQLite
    Bonjour tout le monde,

    Je suis en train d'essayer de charger des données de SQLite dans une ListView (la ListView est dans un activité non ListActivity).

    Ma bdd ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private static final String APPLICATION_TABLE_CREATE =
                    "CREATE TABLE application (" +
                    "id INTEGER PRIMARY KEY, " +
                    "fullname TEXT);";
    Donc j'ai juste un fullname et un id, que je récupère comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Cursor data = database.database.query("names", new String[] {"id as _id", "fullname"}, null, null, null, null, null);
     
    CursorAdapter dataSource = new SimpleCursorAdapter(this, R.id.listviewapplication, data, new String[] {"fullname"}, WHAT TO PUT HERE);
     
    lstApplication.setAdapter(dataSource);
    Mais je sais pas quoi mettre dans les deux dernières paramètres de SimpleCursorAdapter (String[] from and int[] to).

    Voila comme est "déclarée" ma ListView
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <ListView 
                    android:id="@+id/listviewapplication"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent" />
    Merci d'avance pour votre aide !!!

    PoZZyX

  2. #2
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    Alors j'ai changé mon xml comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <ListView 
                    android:id="@+id/listviewapplication"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent">
                    <TextView android:id="@+id/listviewapplicationtext"
                    		  android:layout_width="fill_parent"
                    		  android:layout_height="wrap_content" />
    et mon code j'en suis là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Cursor data = database.database.query("application", new String[] {"id as _id", "fullname"}, null, null, null, null, null);
        	startManagingCursor(data);
        	ListAdapter dataSource = new SimpleCursorAdapter(this, R.id.listviewapplication, data, new String[]{"fullname"}, new int[]{R.id.applicationlistviewitemtext}); 
        	lstApplication.setAdapter(dataSource);
    Maintenant j'obtiens l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    05-13 13:58:13.599: ERROR/AndroidRuntime(27867): Caused by: java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView

    Une idée ????

  3. #3
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Salut,

    Alors déjà dans la description de ton interface en XML, tu ne peux pas inclure de composant dans ta ListView.

    Ensuite, je reprend un peu les bases pour gérer une liste :
    - Un composant visuel pour afficher une liste (là une ListView)
    - Un composant visuel pour afficher un item de la liste (là ça n'a pas l'air d'être défini)
    - Une classe pour gérer les données (un adapter, ici ton cursor adapter)
    - une source de données (un tableau, une requete SQL, etc).


    Donc tu réalises ta requête SQL, tu initialises ton adapter avec le résultat de ta requête.
    Ton adapteur est chargé de faire le lien entre l'affichage des données et les données.
    Il a donc besoin pour être initialisé :
    - d'une source de donnée
    - d'un type de layout à appliquer pour chaque item
    - comment les données sont "bindées" sur chaque "item layout"

    Donc ici les informations qu'il doit te manquer c'est la dernière étape. Le "String[] from" et le "int[] to" permet de réaliser ton binding.

    Si je prend un exemple :
    Tu as un fichier XML (monitem.xml) pour décrire un item :
    il contient deux textview (R.id.tvnom et R.id.tvprenom). Le premier sert à afficher le nom et le deuxième le prénom

    Tu interroge une table avec deux colonnes "nom" et "prenom".
    Du coup, pour initialiser ton adapter, il faut faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ListAdapter dataSource = new SimpleCursorAdapter(this, R.id.monitem, data, new String[]{"nom", "prenom"}, new int[]{R.id.tvnom, R.id.tvprenom});
    Et ensuite, tu initialises ta liste en passant ton adapter.
    Et normalement ta liste devrait s'afficher.

    Je sais pas si c'est plus claire, mais n'hésites pas si tu as des questions.

  4. #4
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    Hello et merci pour le petit cours, c'est plus clair sur le fonctionnement.

    Du coup, j'ai adapté comme suit :
    main.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    <ListView 
                    android:id="@+id/listviewapplication"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent" />
    ...
    application_list_item.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent">
      	<TextView android:layout_height="wrap_content" 
      			  android:layout_width="fill_parent" 
      			  android:id="@+id/listviewapplicationtext" 
      			  android:layout_marginLeft="10dip" 
      			  android:textSize="20dip" />
    </LinearLayout>
    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        	Cursor data = database.database.query("application", new String[] {"id as _id", "fullname"}, null, null, null, null, null);
        	startManagingCursor(data);
        	ListAdapter dataSource = new SimpleCursorAdapter(this, R.layout.application_list_item, data, new String[]{"fullname"}, new int[]{R.id.listviewapplicationtext}); 
        	lstApplication.setAdapter(dataSource);
    Mais j'obtiens toujours la même erreur à propos du inflate :S

    Merci pour votre aide !!!

  5. #5
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    Ah c'est tout bon c'est les match parent qui jouent pas, maintenant c'est ok !!

    Merci pour votre aide !!!!

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par défaut
    Bonjour,

    Les paramètres de ton SimpleCursorAdpater ne sont pas bon.

    L'identifiant du layout que tu dois passer au SimpleCursorAdapter représente ton item de liste (l'affichage d'un élément de la liste).
    Dans cette item tu places des TextView (ou autre éléments graphique) avec pour id les valeurs que tu placera dans le paramètre "int[] to" de ton SimpleCursorAdapter.

    Exemple rapide
    item_layout.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <TextView android:id="@+id/text_item1"
                    		  android:layout_width="fill_parent"
                    		  android:layout_height="wrap_content" />
    et pour le SimpleCursorAdapter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        	ListAdapter dataSource = new SimpleCursorAdapter(this, R.layout.item_layout, data, new String[]{"fullname"}, new int[]{R.id.text_item1});
    Le paramètre String[] from = champs de ta base de données ou étiquette de ta requête (as)
    Le paramètre int[] to = id de l'élément graphique dans ton item de liste

    J'espère avoir clair.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. datagrid depuis sqlite
    Par eldiablo81 dans le forum Flex
    Réponses: 0
    Dernier message: 02/04/2010, 16h36
  2. Peupler un tableau HTML depuis le codebehind
    Par nicocomumumu dans le forum ASP.NET
    Réponses: 2
    Dernier message: 18/08/2009, 19h58
  3. Baisse des ventes US de jeux vidéo sans précédent depuis 2000
    Par Pierre Louis Chevalier dans le forum Jeux
    Réponses: 24
    Dernier message: 08/08/2009, 16h27
  4. Listview sans doublons
    Par Kimaos dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 28/05/2009, 11h20
  5. Afficher la ligne entière dans une listView Sans les headers
    Par Msysteme dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/02/2009, 12h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo