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 :

Modifier le style d'un Textview avec HashMap


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut Modifier le style d'un Textview avec HashMap
    Bonjour,

    J'utilise un HashMap pour créer une ListView.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    while (...) 
    {
       map = new HashMap<String, String>();
       map.put("id_textview", "mon label");
       listItem.add(map);
    }
     
    mSchedule = new SimpleAdapter (getBaseContext(), listItem, R.layout.item,
                new String[] {"id_textview"}, 
                new int[] {R.id.id_textview});
    listView.setAdapter(mSchedule);
    Mais je ne vois pas du tout comment m'y prendre pour par exemple rendre ce texte rouge. Comment faire?

    Merci

  2. #2
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Ajoutes la propriété android:textColor au TextView de ton R.layout.item
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Oui mais je voudrais changer cette couleur dynamiquement pour chaque item ajouté. Et je ne vois pas comment attribuer une valeur à textColor par le HashMap

  4. #4
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Comme son nom l'indique, SimpleAdapter sert à faire des choses basiques. Dans ton cas, il est nécessaire de créer ton propre adaptateur (par extension d'un adaptateur existant) pour pouvoir redéfinir la méthode getView. Ainsi, tu décrira précisément l'apparence de chaque item à construire.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  5. #5
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 246
    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 246
    Par défaut
    Je pense qu'un truc comme ça pourrait le faire :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    public class MonAdapter extends BaseAdapter {
    	private HashMap <String, String> mListe;
    	private LayoutInflater mInflater;
    	private ArrayList <String> mListeCle;
     
    	public MonAdapter(Context mContext, HashMap<String, String> mListe, ArrayList <String> mListeCle){
    		mInflater = LayoutInflater.from(mContext); 
    		this.mListe = mListe;
    		this.mListeCle = mListeCle;
    	}
    	public int getCount() {
    		return mListe.size();
    	}
     
    	public Object getItem(int position) {
    		return mListe.get(mListeCle.get(position));
    	}
     
    	public long getItemId(int position) {
    		return 0;
    	}
     
    	public View  getView(int position, View convertView, ViewGroup parent){
    		LinearLayout layoutItem;
     
    		if (convertView == null) {
    			layoutItem = (LinearLayout) mInflater.inflate(R.layout.mon_layout, parent, false);
    		} else {
    			layoutItem = (LinearLayout) convertView;
    		}
     
    		// Clé : mListeCle.get(position)
    		// Valeure : mListe.get(cle)
     
    		return layoutItem;
    	}
     
    }
    Mais j'aime pas trop les HashMap...

  6. #6
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Merci pour la réponse. En fait je suis déjà tombé sur quelque chose comme ça ailleurs, mais je ne comprends pas son utilisation.

    Moi je renseigne simplement le Hashmap, la liste des clés, mais où mettre indiquer la couleur du textView présent dans mon_layout?

    Petite parenthèse: qu'utiliserais-tu sans Hashmap?

  7. #7
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Je suis tombé sur ce tuto, j’espère qu'il va m'aider mais si vous avez des idées... !

    Youhouu tuto extraordinaire ça fonctionne! et je suis bien passé par le ListArray

  8. #8
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Il me reste un problème... je n'arrive pas à supprimer tous les élements.
    Mon but c'est de supprimer toutes les lignes à chaque fois que je sélectionne un nouvel élément dans un spinner (liste déroulante), puis rajouter une nouvelle liste.

    Voila ce que je fais:
    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
    private ArrayList listItems = new ArrayList();
     
    OnCreate() {
       listView = (ListView) findViewById(R.id.listView);
       listAdapter = new AdapterP(getBaseContext(), listItems);
       listView.setAdapter(listAdapter);
     
       // Ici j'initialise le spinner
    }
     
    onItemSelected() {
       listItem.clear();
       listAdapter = new AdapterP(this, listItems);
       listAdapter.notifyDataSetChanged();
     
       Thread_de_recuperation_de_donnees();
     
    }
     
    Handler_du_Thread() {
       listAdapter = new AdapterP(getBaseContext(), listItems);	
       listAdapter.notifyDataSetChanged();	
    }
    Mais le soucis, c'est qu'au premier lancement rien ne s'affiche.
    A la sélection d'un autre element du spinner, ça s'affiche du coup en double.
    A la sélection d'un 3e, ça cumule encore... rien n'est donc supprimé, ET j'ai un problème d'affichage lors de l'initialisation.

    D'où vient le problème?
    Merci

  9. #9
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Pourquoi est ce que tu recrées ton adapter a chaque coup ?

    De plus juste pour savoir est ce que tu mets bien à jour cette varaible listItems.

    Car tu recrées ton adapter mais on voit nulle part le fait que tu nettoies cette liste avant.

    Si tu veux supprimer ajouter un élément dans ta liste, alors il te suffit juste depuis ton Adapter à mettre la liste des éléments à jour et d'appeller comme tu le fais le notifyDataSetChanged().
    Tu n'as pas besoin de créer un nouvel adapter :s.

  10. #10
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Merci pour la réponse. Entre temps je m'en suis sorti en faisant:

    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
    OnCreate() {
       listViewM = (ListView) findViewById(R.id.listViewTransactions);
       listAdapter = new AdapterP(this, listItems);
       listViewM .setOnItemClickListener(new OnItemClickListener() {  
             // Listener
          }
       });  
       listViewM .setAdapter(listAdapter);
    }
     
    Handler() {
     
       // int what = 1 (en cours):
       Bundle donnees = msg.getData();
       listItems.add(new styleListView(donnees.getInt("donnees"),
     
       // int what = 2 (end) :
       istAdapter = new AdapterP(Class.this, listItems);	
       listAdapter.notifyDataSetChanged();
       listViewM .setAdapter(listAdapter);
     
    }
    Le .clear() je le fais dans le Thread de traitement au début.
    Mais en testant, j'ai été obliger d'en créer un nouveau à chaque end, sinon le changement n'est pas pris en compte avec seulement un notifyDataSetChanged().

  11. #11
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Mais en testant, j'ai été obliger d'en créer un nouveau à chaque end, sinon le changement n'est pas pris en compte avec seulement un notifyDataSetChanged().
    Si tel est le cas alors tu as un souci sur la gestion de tes données dans ton Adapter.

    Normalement un notifyDataSetChanged suffit à notifier à la liste à se mettre à jour.

    Car là niveau performance c'est vraiment pas terrible :/

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/07/2011, 10h05
  2. une fonction modifiant le style avec z-index
    Par Stuff dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 14/10/2008, 09h48
  3. [TRichEdit] Comment modifier le style d'une sélection ?
    Par PpPool dans le forum Composants VCL
    Réponses: 2
    Dernier message: 15/11/2005, 10h16
  4. modifier le contenu d'une table avec innerHTML
    Par francon81 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 31/05/2005, 09h02
  5. [VB.NET] Comment envoyer un texte modifié(couleurs,style...)
    Par fdiedler dans le forum Windows Forms
    Réponses: 8
    Dernier message: 14/03/2005, 18h11

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