soulignant l'élément sélectionné dans la liste sous android
je suis d'avoir 1 affichage de la liste contactslist
. J'ai écrit le code pour mettre en évidence l'élément sélectionné dans le ListView
. Il est de travail. Quand je clique sur 1 item il met en surbrillance cet item mais le problème est que si je clique sur un autre item il met aussi en surbrillance cet item. Je tiens à souligner l'élément sélectionné. La sélection précédente ont disparu lorsque je clique sur un autre élément.
arg1.setBackgroundResource(R.drawable.highlighter);
c'est le code de l'écouteur de clic utilisé pour mettre en évidence l'élément sélectionné. plz help je.
mise à Jour
Je mets le fond des lignes dans l'adaptateur:
public int[] colors = new int[]{0xFFedf5ff, 0xFFFFFFFF};
public int colorPos;
[...]
colorPos = position % colors.length;
row.setBackgroundColor(colors[colorPos]);
4 réponses
ListViews
par défaut ne pas avoir un choiceMode
set (qu'il est défini à none
), de sorte que la sélection actuelle n'est pas indiqué visuellement.
pour changer cela, vous avez juste besoin de définir le choiceMode
l'attribut de votre ListView
singleChoice
.
Si vous souhaitez personnaliser l'arrière-plan pour les éléments sélectionnés dans votre liste, vous devriez également définir le listSelector
l'attribut. Là, vous pouvez spécifier non seulement les couleurs, mais un drawable (images, couche-/état-un drawable).
<ListView android:id="@+id/my_list"
android:choiceMode="singleChoice"
android:listSelector="@android:color/darker_gray" />
Si vous ne pas utiliser un ListView
directement, mais un ListActivity
, alors ces attributs doivent être définis à partir du code, donc vous devriez étendre votreonCreate
méthode avec ces lignes:
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
getListView().setSelector(android.R.color.darker_gray);
donc si vous utilisiez un écouteur de clic pour changer l'arrière-plan de la ligne sélectionnée, supprimez cela de votre code, et utilisez la méthode appropriée d'en haut.
Répondre à la mise à jour
Si vous définissez l'arrière-plan de votre méthode getView, au lieu d'utiliser un couleur statique, appliquer une liste d'État à dessiner sur le fond de la ligne avec duplicateParentState mis à true. De cette façon, il va changer son affichage en fonction de l'état actuel de l'élément: normal, concentré, pressé, etc.
dans listview xml ajouter le mode "singleChoice"
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:choiceMode="singleChoice"
(...) >
</ListView>
dans la liste article layout ajouter
android: background="?android: attr / activatedBackgroundIndicator
exemple
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="?android:attr/activatedBackgroundIndicator">
<!-- your item content-->
</LinearLayout>
Une meilleure façon est dans votre thème, @drawable / list_selector
list_selector.XML :
<!-- <item android:drawable="@color/android:transparent" android:state_selected="true" /> -->
<item android:drawable="@color/list_bg" android:state_selected="true"/>
<item android:drawable="@color/list_bg" android:state_activated="true"/>
<item android:drawable="@color/transparent"/>
puis définissez background pour root de votre list_row.XML android: background="?android: attr / activatedBackgroundIndicator"
Try this at onListItemClick
view.getFocusables(POSITION);
view.setSelected(true);
Il met en évidence la sélection.