2012-06-12 10 views
12
sélectionné

me semble avoir un problème d'interface utilisateur avec un ListView. J'ai un listview et en sélectionnant un élément sur la liste, met en évidence l'ensemble de la liste. La sélection fonctionne bien, j'obtiens l'élément correct dans l'écouteur.liste complète Android listview se

Mais le problème est que lorsque je sélectionne un élément, l'ensemble listview est mise en surbrillance, il est donc difficile de dire quelle ligne se est sélectionnée.

Cela fonctionne très bien sur Android> 3.1 - Je teste actuellement sur un périphérique 2.3.

<ListView 
     android:id="@+id/myList" 
     android:layout_width="match_parent" 
     android:layout_height="300dp" 
     android:layout_marginTop="@dimen/margin_medium" 
     android:background="@drawable/border" 
     android:listSelector="#99000000" 
     android:scrollbarFadeDuration="1000000" 
     android:scrollbars="vertical" > 
    </ListView> 

Répondre

-3

Je fixe en supprimant cette ligne: (ne sais pas pourquoi il a travaillé)

android: listSelector = "# 99000000"

26

J'ai eu récemment la même question, mais la raison était en Android < 3.0 bug: si vous définissez un @color comme dessinable pour votre sélecteur de liste d'éléments, il remplira toute la zone de liste. La solution consiste à utiliser un dessin "shape" au lieu de @color.

, créez un nouveau fichier XML dans res/drawable dossier avec un contenu similaire:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

    <solid android:color="@color/my_list_item_pressed_color" /> 
</shape> 

et de référence créé drawable dans votre sélecteur ListView pour state_pressed (également créé en tant que fichier XML dans res/drawable dossier):

<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_pressed="true" android:drawable="@drawable/list_item_pressed_bg" /> 
    <item android:drawable="@android:color/transparent" /> 
</selector> 

Et utiliser ce sélecteur dans votre ListView:

<ListView 
    ..... 
    android:listSelector="@drawable/list_item_selector" /> 

C'est tout. Fonctionne au moins avec Android 2.2-2.3.

+0

Merci! Ces bugs pré 3.0/4.0 sont vraiment énervants, car ils ne sont pas du tout documentés! –

+0

Je souhaite avoir trouvé ce poste heures avant. Notez que vous pouvez également le faire par programmation: 'ShapeDrawable sd = new ShapeDrawable (new RectShape()); sd.getPaint(). setColor (Color.RED); listview.setSelector (sd); ' –

1

Si vous ne voulez pas changer votre sélection, vous pouvez également définir comme l'arrière-plan de la mise en page de l'élément de liste, plutôt que dans le domaine de listSelector de ListView. Les éléments de la liste reçoivent l'état "sélectionné" lorsqu'ils sont touchés et la couleur est affichée correctement.

Cela fonctionne pour toutes les versions d'Android.

Ex: Voici votre liste Aménagement

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/background_color"> 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Your text here" /> 
</LinearLayout> 

et votre liste sans sélecteur de liste:

<ListView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" />