Change la couleur de fond d'un élément dans Android ListActivity onListItemClick
Je sais que cela semble très simple, et il y a des questions à ce sujet. Mais rien de tout cela pourrait résoudre mon problème. Donc, ici, nous allons:
Je veux changer la couleur d'arrière-plan d'un élément de liste dans ListActivity
lorsque l'utilisateur clique sur elle, et de revenir à la couleur d'origine lorsque l'utilisateur clique à nouveau (c'est à dire Sélectionner/Désélectionner l'élément de tri de look)
J'ai essayé d'utiliser getChildAt, il fonctionne parfaitement, si j'ai tous les éléments visibles à l'écran sans avoir à faire défiler.
Code:
getListView().getChildAt(position).setBackgroundColor(Color.CYAN);
Le problème commence quand j'ai plus d'éléments dans la liste et l'utilisateur doit les faire défiler. Une fois à l'arrière-plan d'un élément est modifié, La couleur d'arrière-plan s'affiche sur les nouveaux éléments visibles comme je le défilement. Aussi, le getChildAt(position)
retourne null
(et donc un NullPointerException
) en cliquant à nouveau sur l'élément.
Quelqu'un peut m'aider avec un code simple qui me permet de changer la couleur de fond d'un élément de la liste?
Merci d'avance!
OriginalL'auteur Suraj Bajaj | 2012-09-26
Vous devez vous connecter pour publier un commentaire.
Chose sûre. Je voudrais faire cela dans le
getView()
méthode personnaliséeListAdapter
.Mise à jour
coloredItems
lorsqu'un élément de la liste est sélectionné.Vous êtes la bienvenue!
après quelques heures de l'impasse que vous m'avez montré le droit chemin , bien fait homme!
OriginalL'auteur heycosmo
Si vous faites affaire avec
ListFragment
ce code sera utile,OriginalL'auteur FingerSmith
Ce que je fais c'est de créer un fichier xml appelé c'est à dire list_background et le mettre dans le dossier drawable.
Le xml ressemble à ceci:
Et dans le code xml pour la liste de l'article que j'ai mis ce code xml que les éléments d'arrière-plan c'est à dire
item.xml:
style=@style/Remplissage est qu'un raccourci que j'ai fait pour
android:layout_height="match_parent" et android:layout_width="match_parent
Puis dans onListItemCLick:
Oui, vous avez besoin de modifier la
getView
méthode de votre ListAdapter persister cet état (voir ma réponse ci-dessous). Parce que ListView réutilise les Vues d'éléments, un élément qui apparaît en haut (après un défilement) peut hériter des traits à partir d'un élément qui, à gauche, en bas, à moins que ces traits sont remis à zéro dansgetView
.Que faire si je ne suis pas en utilisant ma propre ListAdapter? Parce que je suis à l'aide d'un SimpleAdapter. Comment puis-je résoudre ce problème?
Sous-classe
SimpleAdapter
et remplacergetView
. Je vais mettre à jour ma réponse en fonction de ce détail.OriginalL'auteur alliannas
Simplement, vous pouvez le faire comme ceci dans
onListItemClick
méthodeOriginalL'auteur Stephen
c'est la façon dont je l'ai fait:
créer une variable globale
View ColoredView
; puis, lorsque voussetOnItemClickListener
pour votreListView
, faites ceci:c'est la façon la plus simple à mon avis.
OriginalL'auteur Amjad Abu Saa
Grâce heycosmo. votre solution a résolu mon problème.
N'ai aucune idée de pourquoi nous devrions mettre en arrière-plan à 2 endroits.
1. Adaptateur getView()
2. ListActivity de onListItemClick().
OriginalL'auteur Purusothaman A