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

Android Discussion :

Personnalisation objet (SQLite)


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Willy55
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 188
    Par défaut Personnalisation objet (SQLite)
    Mon problème est assez difficile a expliquer :

    J'ai des données dans une base SQLite.
    Je récupère les élément d'une table et j'affiche ces données dans une listview à l'aide d'un fichier XML personnalisé pour mettre en forme ces objets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void DataBind(){
        	Cursor c = db.recupererInfo();
        	startManagingCursor(c);
        	SimpleCursorAdapter adapter = new SimpleCursorAdapter(this.getBaseContext(), R.layout.recup_listinfo, c,
        	new String[]{"numero", "heure_depart", "ville_depart", "heure_arrivee", "ville_arrivee", "destination", "nb_pers"}, 
        	new int[]{R.id.textNumero, R.id.textHeureDepart, R.id.textVilleDepart, R.id.textHeureRetour, R.id.textVilleRetour, R.id.textDestination, R.id.textNbPers} );
        	listview.setAdapter(adapter);
        	listview.setOnItemClickListener(this);
    }
    J'aimerais agir sur chaque objet qui va se créer pour pouvoir personnaliser le background de chaque objet en fonction d'une donnée dans la base.

    J'illustre mon problème par un morceau de code que j'avais imaginé :

    Pour chaque élément :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        	RelativeLayout cadreCouleur;
        	cadreCouleur = ((RelativeLayout)this.findViewById(R.id.cadreCouleur));
        	while(i < tailleCursor)
        	{
        		c.moveToPosition(i);
        		if(c.getString(9) != "")
            	{
            		cadreCouleur.setBackgroundColor(R.color.red);
            	}
        		i++;
        	}
    La méthode "startManagingCursor(c)" semble s’exécuter en une seule fois, non pas ligne par ligne, comment personnaliser chaque objet si tout se fait en une fois ?

  2. #2
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 141
    Par défaut
    Là tu utilises un SimpleCursorAdapter, pour personnaliser des views il faut faire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ((SimpleCursorAdapter) adapter).setViewBinder(
         new SimpleCursorAdapter.ViewBinder(){
     
              public boolean setViewValue(View view, Cursor cursor, int columnIndex){
                   if(columnIndex == 9){
                        RelativeLayout cadreCouleur = ((RelativeLayout)view.findViewById(R.id.cadreCouleur));
                        // Là tu modifies
                        return true;
                   }
                   return false;
              }
         }
    );

  3. #3
    Membre confirmé Avatar de Willy55
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 188
    Par défaut
    Bonjour, merci de votre réponse.

    J'ai intégré votre code dans ma fonction comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
        public void DataBind(){
        	Cursor c = db.recupererInfo();
        	startManagingCursor(c);
        	SimpleCursorAdapter adapter = new SimpleCursorAdapter(this.getBaseContext(), R.layout.recup_listinfo, c,
        	new String[]{"numero", "heure_depart", "ville_depart", "heure_arrivee", "ville_arrivee", "destination", "nb_pers"}, 
        	new int[]{R.id.textNumero, R.id.textHeureDepart, R.id.textVilleDepart, R.id.textHeureRetour, R.id.textVilleRetour, R.id.textDestination, R.id.textNbPers} );
        	listview.setAdapter(adapter);
        	listview.setOnItemClickListener(this);
     
        	((SimpleCursorAdapter) adapter).setViewBinder(
    		     new SimpleCursorAdapter.ViewBinder(){
     
    		          public boolean setViewValue(View view, Cursor cursor, int columnIndex){
    		               if((cursor.getString(9)).equals("")){
    		                    RelativeLayout cadreCouleur = ((RelativeLayout)view.findViewById(R.id.cadreCouleur));
    		                    cadreCouleur.setBackgroundColor(R.color.red);
    				            Log.d("is_read", cursor.getString(9).toString());
    		                    return true;
    		               }
    		               return false;
    		          }
    		     }
        	);
        }
    Comme ça ne marchait pas et que je n'avais pas d'erreur j'ai mis un petit log.d pour voir la fameuse valeur de la colonne is_read de ma table (9ème colonne), sa me la renvois 21 fois par ligne.
    Je ne comprend pas pourquoi... il n'y a qu'une seule valeur a la 9ème colonne du cursor et je n'ai qu'une ligne dans ma table pourquoi 21 fois...

    Je suis un peu perdu...

  4. #4
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 141
    Par défaut
    Ton if ne veut rien dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((cursor.getString(9)).equals(""))
    En fait (en gros) setViewValue() est appelé pour chaque éléments de int to[] et pour chaque élément du cursor.
    Si ça se trouve t'as 7 trucs à dessiner, et 3 entrées du coup ça fait 21.
    Enfin je dis peut être que des conneries en gros.

    Mais ton if est faux c'est sûre.

  5. #5
    Membre confirmé Avatar de Willy55
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 188
    Par défaut
    Ah oui d'accord, en effet c'est faux... mais c'est bizarre je vais chercher la valeur de is_read dans ma table ou il n'y a qu'une seule entrée... et en tout il y a 11 données par entrée, aucune chance que sa me retourne 21 fois la même valeur...

    J'arrive bien a changer la couleur de font du layout associé a la classe, par contre je ne peux pas modifier le layout dont je me sert pour personnaliser les objets de ma listview.

    Parce que c'est ça que je voudrais faire, pour une données précise de ma table suivant sa valeur personnaliser le background de chaque objet.

  6. #6
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 141
    Par défaut
    Est-ce que la valeurs qui t’intéresse fait partie de cette liste :
    "numero"
    "heure_depart"
    "ville_depart"
    "heure_arrivee"
    "ville_arrivee"
    "destination"
    "nb_pers"

    Si oui, tu peux faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(columnIndex == cursor.getColumnIndex("nb_pers")){
         // et là selon la valeur tu peux faire ton traitement
    }
    Enfin déjà si tu fais un if de ce genre, ça devrait faire ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.d("is_read", cursor.getString(9).toString())
    ; beaucoup moins souvent.

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

Discussions similaires

  1. [Débutant] mapper des objets sur une table de sqlite
    Par fourchette dans le forum C#
    Réponses: 16
    Dernier message: 19/04/2012, 14h45
  2. persistance d'un objet SQLite
    Par slix_alex dans le forum SQLite
    Réponses: 0
    Dernier message: 17/03/2011, 18h34
  3. [Joomla!] Personnalisation d'objet avant commande
    Par brsi0566 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 28/12/2009, 18h23
  4. Personnaliser l'objet Treeveew au niveau du Skin
    Par Delphi-ne dans le forum ASP.NET
    Réponses: 5
    Dernier message: 02/04/2009, 17h43
  5. Personnalisation d'une propriété d'un objet
    Par Domi2 dans le forum VBA Access
    Réponses: 2
    Dernier message: 25/08/2007, 09h42

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