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]);
34
demandé sur Ben Lings 2011-05-02 09:26:44

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 ListViewsingleChoice.

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.

108
répondu rekaszeru 2014-05-14 13:19:10

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> 
22
répondu Gonçalo Alberto 2015-02-09 17:05:49

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"

7
répondu subair_a 2014-04-22 06:31:43

Try this at onListItemClick

view.getFocusables(POSITION);
view.setSelected(true);

Il met en évidence la sélection.

0
répondu kanna 2013-06-12 09:51:02