Change la couleur de fond de l'élément sélectionné dans un contrôle ListView
Je veux savoir comment je peux changer la couleur d'arrière-plan de l'élément sélectionné sur ma liste. Je veux seulement changer l'élément cliqué par l'utilisateur, de sens que si l'utilisateur clique sur un autre élément, il sera celui qui est mis en évidence. Eh bien, puisque je veux rester simple que possible et d'utiliser la valeur par défaut d'android listview j'ai utilisé ce code à la place:
record_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
try{
for (int ctr=0;ctr<=record_items.length;ctr++){
if(i==ctr){
record_list.getChildAt(ctr).setBackgroundColor(Color.CYAN);
}else{
record_list.getChildAt(ctr).setBackgroundColor(Color.WHITE);
}
}
}
catch (Exception e){
e.printStackTrace();
}
Log.v("Selected item",record_list.getItemAtPosition(i));
}
});
Ok c'est un travail mais le problème est que c'est lent. Maintenant, je veux savoir si il y a d'autre sens que je peux faire ce qui va donner le même résultat que j'ai fait.
J'ai essayé d'utiliser record_list.getSelectedView().setBackgroundColor(Color.CYAN);
mais il me donne une exception de pointeur null.
J'ai aussi essayé la selector.xml mais il ne voulait pas faire l'affaire.
En outre, il est l'une des propriétés sur ListView qui est appelé listSelector. C'est un drawable comme le dit la documentation "Drawable utilisé pour indiquer l'élément actuellement sélectionné dans la liste." Je crois aussi que cela devrait faire l'affaire et oui il faire l'affaire sur mon émulateur mais pas sur ma galaxy tab. J'ai aussi essayé les autres méthodes, mais rien ne fonctionne comme je le voulais.
- l'utilisation de fichier xml pour listview pour que..
- avez-vous coché cette option, la liste.setSelector(R. drawable.detail_hover); où mon deatil_hover est la .png drawable. essayez cela, j'espère que cela va vous aider.
- vous obtenez un objet de vue dans onitem cliquez sur, pour changer la couleur d'arrière-plan de ce point de vue et l'enregistrer en tant que prvsselected vue sur suivant cliquez sur vérifier prvsselect vue est null ou pas, si elle n'est pas null, alors le changement de couleur par défaut
- Cette méthode n'aboutit pas pour des listes de plus de 1 hauteur de l'écran.
- Solution efficace en 2 lignes: stackoverflow.com/questions/16976431/...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez garder une trace de la position de l'élément sélectionné:
Et remplacer la méthode getView de votre carte:
Pour moi, il a fait le tour.
id
au lieu deposition
parce queposition
commence à 1, tandis que les articles de ma carte commence à 0. J'ai peut-être un cas rare pour ce bien, mais pensé que je devais mentionner au cas où quelqu'un est coincé.position
et de l'extrait de l'en-tête nombre de vues.Vous pouvez utiliser un sélecteur. Changer les couleurs des valeurs et de modifier le ci-dessous en fonction de vos besoins.
bkg.xml dans le dossier drawable
pressed.xml dans le dossier drawable
normal.xml dans le dossier drawable
Définir l'arrière-plan dessiné à la liste mise en page personnalisée pour être gonflé pour chaque ligne
Je recommande d'utiliser un custom listview avec un adaptateur personnalisé.
Si vous n'avez pas utilisé un adaptateur personnalisé vous pouvez définir la listselector à la liste ci-dessous
state_selected="true"
le sélecteur de xml.Définir la variable
Initialiser la variable
OnItemClickListener de listview
Construire et exécuter le projet Fait
Si vous voulez avoir l'élément mise en surbrillance après avoir cliqué, vous devez définir manuellement comme étant sélectionné dans le onItemClick auditeur
Android ListView élément sélectionné séjour en surbrillance:
Cela suppose que vous avez un state_selected élément dans votre sélecteur:
view.setSelected(true);
rend mon point toujours être sélectionné. Comment puis-je faire, il n'est pas sélectionné?Méthode 1:
Mise à jour ListView dans le xml du layout de l'activité/de fragment:
Que c'est, vous avez terminé!
Si vous voulez un programmatique façon de gérer cette puis utilisez la méthode 2...
Méthode 2:
Si vous utilisez un ListFragment vous pouvez remplacer onListItemClick(), en utilisant la vue d'ensemble de la couleur. Enregistrer la Vue actuelle sélectionné pour réinitialiser la couleur de la dernière sélection.
Veuillez noter que ceci ne fonctionne que sur les listviews que tenir sur un seul écran, car la vue est recyclé.
D'abord, vous pouvez créer sélecteur de fichier xml comme ci-dessous dans votre dossier drawable
drawable/list_item_selector.xml
Et puis dans votre listview spécifier fond comme
Pour ceux qui se demandent EXACTEMENT ce qui doit être fait pour garder les lignes sélectionnées, même pendant que vous faites défiler vers le haut vers le bas. C'est le state_activated Le reste est pris en charge par des fonctions internes, vous n'avez pas à vous soucier de la bascule, et pouvez sélectionner plusieurs éléments. Je n'ai pas besoin d'utiliser notifyDataSetChanged() ou setSelected(true) méthodes.
Ajoutez cette ligne à votre sélecteur de fichier, pour moi drawable\row_background.xml
Puis dans layout\custom_row.xml
Pour plus d'informations, je suis en utilisant ce avec ListView Carte, à l'aide de
myList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
et
myList.setMultiChoiceModeListener(nouveau MultiChoiceModeListener()...
partir de cet exemple: http://www.androidbegin.com/tutorial/android-delete-multiple-selected-items-listview-tutorial/
Aussi, vous (devez) utiliser cette structure pour votre liste de l'adaptateur d'accouplement: Liste maliste = new ArrayList();
au lieu de: ArrayList myList = new ArrayList();
Explication: Liste Type de rapport type ArrayList en Java
utiliser le code xml ci-dessous que listitem contexte, il permettra de résoudre tous les problèmes.
Les sélectionnés seront mis en évidence si vous défilez vers le bas.
Grâce,
Nagendra
Je fais aussi la même chose: mettez en surbrillance la liste sélectionnée de l'élément de fond (changer en rouge) et de définir la couleur du texte dans l'élément de blanc.
Je ne peux penser à un "simple mais pas efficace" façon:
maintenir un élément sélectionné dans l'adaptateur personnalisé, et de le modifier dans la liste de
OnItemClickListener
mettre en œuvre:Puis mise à jour de l'élément sélectionné à l'arrière-plan et la couleur du texte dans
getView()
méthode.Après avoir cherché pendant un certain temps, j'ai découvert que de nombreuses personnes mentionnées sur le point de mettre
android:listSelector="YOUR_SELECTOR"
. Après avoir essayé pendant un certain temps, j'ai trouvé le moyen le plus simple pour mettre en surbrillance élément de liste sélectionné l'arrière-plan peut être fait avec seulement deux lignes de la liste mise en page de ressources:Il y a aussi d'autres façon de faire le travail, comme le personnaliser
activatedBackgroundIndicator
thème. Mais je pense que ce serait beaucoup plus générique une solution, car il aura une incidence sur l'ensemble du thème.Façon la plus simple que j'ai trouvé:
dans votre activité XML ajouter ces lignes:
ou par programmation à l'ensemble de ces propriétés:
Mon exemple particulier:
grâce à AJG:
https://stackoverflow.com/a/25131125/1687010
Je sais que c'est une vieille question, mais je donne une solution simple à ce besoin (sans la boucle!):
suppose que vous voulez un article, en cliquant à chaque fois. Ce code fonctionne bien. Prenons la liste de nom que stlist
C'est une méthode simple qui peut gérer la sélection, même si la liste est assez longue:
Et puis dans votre onclicklistener:
Dans une liste définie:
Créer un sélecteur pour le fond (les drawable/selector_gray.xml):
Ajouter un élément à une liste:
Dans un ViewHolder vous pouvez gonfler ce point.
C'est très simple. Dans le constructeur de la "OnItemClick" utiliser le paramètre "affichage", qui est le second qui représente la listView ou GridView, des objets de la vue et il devient le nouveau point de vue faite par l'adapterView de soi. Ainsi, pour définir de nouvelles couleurs SEULEMENT à l'ÉLÉMENT SÉLECTIONNÉ lui-même effectuez les opérations suivantes:
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l){
//view is instead of the view like textView , ImageView, or whatever
view.setBackgroundColor(Color.green);
}
Si vous n'avez aucun des codes différents pour définir une nouvelle couleur, vous ferez face maladroit de comportements tels que le vert est la couleur sera appliquée à la unclicked élément.