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 :

Changer la couleur d'un élément d'un listView


Sujet :

Composants graphiques Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 21
    Points : 23
    Points
    23
    Par défaut Changer la couleur d'un élément d'un listView
    Bonjour voilà dans mon développement android j'ai besoin d'un listView qui affiche des articles et quand on sélectionne un article ça modifie le contenu en bas de la page et donc j'aimerais que l'élément dans la listView change de couleur. j'y arrive mais le problème c'est qu'il change aussi la couleur d'autre élément quand je défile le reste de la listView. voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ListView list = (ListView)findViewById(android.R.id.list);
    			list.setOnItemClickListener(new OnItemClickListener() {
     
    				public void onItemClick(AdapterView<?> arg0, View arg1,
    						int position, long arg3) {
    					arg1.setBackgroundColor(android.graphics.Color.GREEN);
     
    					//reste de ma fonction
     
    				}
    			});
    la couleur ce met bien mais elle est aussi présent sur d'autres plus bas
    je sais pas si quelqu'un à eu le cas ??
    merci

  2. #2
    Membre actif
    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
    Points : 203
    Points
    203
    Par défaut
    Bonjour,

    C'est normal, la vue qui est affichée est recyclée d'une autre vue dans les listviews, si votre liste contient 200 éléments, il n'est pas généré 200 vues (ce serait beaucoup trop lourd), le système généré un nombre réduit de vue qu'il va recyclé dés qu'un nouvel item devra être affiché (scroll de la liste).

    Donc la vue avec la couleur de fond verte, va se retrouver plus loin utilisé pour afficher un autre item (que celui générant le changement de couleur).

    Il faudrait redéfinir getView de l'adapter, modifié la couleur de fond par celle originale et comparer la valeur de l'item (id) avec l'article affiché pour changer la couleur en vert.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 21
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Aerinder Voir le message
    Bonjour,

    C'est normal, la vue qui est affichée est recyclée d'une autre vue dans les listviews, si votre liste contient 200 éléments, il n'est pas généré 200 vues (ce serait beaucoup trop lourd), le système généré un nombre réduit de vue qu'il va recyclé dés qu'un nouvel item devra être affiché (scroll de la liste).

    Donc la vue avec la couleur de fond verte, va se retrouver plus loin utilisé pour afficher un autre item (que celui générant le changement de couleur).

    Il faudrait redéfinir getView de l'adapter, modifié la couleur de fond par celle originale et comparer la valeur de l'item (id) avec l'article affiché pour changer la couleur en vert.
    je viens d'essayer en redéfinissant le getView de mon adapter mais j'ai toujours le même souci. pour l'exemple j'ai mis un test de position pour colorer un élément précis mais toujours pareil ici la ligne n°3 est coloré ainsi qu'une plus bas.
    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
    public View getView(int position, View convertView, final ViewGroup parent) {
    	View v = convertView;
    	if (v == null) {
    		LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    		v = vi.inflate(android.R.layout.simple_list_item_1, null);
    	} 
    	TextView post = (TextView) v.findViewById(android.R.id.text1);
    	post.setText(listeArticle.get(position));
     
    	if(position == 3){
    		v.findViewById(android.R.id.text1).setBackgroundColor(Color.GREEN);
    	}
     
    	/*v.setOnClickListener(new OnClickListener() {
     
    		public void onClick(View v) {
    			for(int i = 0; i < parent.getChildCount(); ++i){
    				parent.getChildAt(i).setBackgroundColor(Color.TRANSPARENT);
    			}
    				v.findViewById(android.R.id.text1).setBackgroundColor(Color.GREEN);
    		}
    	});*/
     
    	return v;
    }

  4. #4
    Membre actif
    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
    Points : 203
    Points
    203
    Par défaut
    C'est toujours le même problème comme les vues sont recyclées il faut remettre la background original pour les items qui ne correspondent pas. Dans le else par exemple.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 21
    Points : 23
    Points
    23
    Par défaut
    Merci et alors qu'est ce qui fait que lorsque je click sur un elements et qu'il ce colorie avec le setBackground et que je descends la list view et que je la remonte la couleurs à changé d'item ?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 21
    Points : 23
    Points
    23
    Par défaut
    c'est bon j'ai réussi mais en passant par une classe interne qui contient un boolean pour savoir si il à été sélectionné ou pas et celui ci est remis à zéro pour tout les éléments lors d'un click ! c'est un peut brouillon mais ça marche

  7. #7
    Membre actif
    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
    Points : 203
    Points
    203
    Par défaut
    C'est ce que je disais, les vues étant recyclée, une vue où le background a été changé est réutilisé pour afficher un autre élément.


    Plus d'explications et un lien vers un schéma : http://www.developpez.net/forums/d10...s/#post6016652

  8. #8
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 838
    Points : 18 763
    Points
    18 763
    Par défaut
    Le but du jeu c'est que le background de l'item dans la ListView change de couleur lors du clique ?

    Parce que si c'est le cas, vous pouvez utiliser un selector.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 21
    Points : 23
    Points
    23
    Par défaut
    je ne connais pas le principe du selector et comment on l'obtient avec un clique sur une listView.

  10. #10
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 838
    Points : 18 763
    Points
    18 763
    Par défaut
    Par exemple si tu veux changer le background de tes items.

    Tu va dans le Layout de ton item et tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    android:background="@drawable/listview"
    Et dans /res/drawable/ tu créer le fichier listview.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">   
        <item android:state_pressed="true" android:drawable="@drawable/background_quand_l_item_est_pressé" />   
        <item android:drawable="@drawable/background_normal" />
    </selector>
    Voila une façon simple de changer la couleur de fond lorsque l'on appuie sur un item dans une ListView.

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

Discussions similaires

  1. JComboBox : Changer la couleur d'un élément ?
    Par wam111 dans le forum Composants
    Réponses: 8
    Dernier message: 24/06/2014, 11h26
  2. Réponses: 6
    Dernier message: 22/12/2005, 11h32
  3. Réponses: 11
    Dernier message: 15/04/2005, 15h42
  4. [JList] changer la couleur d'UN élément
    Par youb dans le forum Composants
    Réponses: 1
    Dernier message: 31/03/2005, 11h31
  5. [VB6]Changer la couleur d'une ligne d'un ListView
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 14/03/2003, 17h02

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