2012-06-12 19 views
12

Mi sembra di avere un problema di interfaccia utente con un listview. Ho un listview e selezionando qualsiasi elemento nell'elenco, evidenzia l'intera listview. La selezione funziona correttamente, ottengo l'elemento corretto nell'ascoltatore.Elenco di Android Visualizza l'intero elenco selezionato

Ma il problema è che quando seleziono una voce, l'intera lista viene evidenziata, quindi è difficile dire quale riga è stata selezionata.

Questo funziona correttamente su Android> 3.1 - Attualmente sto testando su un dispositivo 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> 

risposta

-3

Ho fissato questo rimuovendo questa linea: (non so perché ha funzionato)

android: listSelector = "# 99.000.000"

26

Recentemente ho avuto lo stesso problema, ma il motivo era in Android < 3.0 bug: se si imposta @color come un drawable per il selettore della voce di elenco premuto, verrà riempito l'intera area della lista. La soluzione è usare un drawable 'shape' invece di @color.

Quindi, creare un nuovo file XML nella cartella res/drawable con contenuti simili:

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

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

e di riferimento creato drawable nel selettore ListView per state_pressed (creato anche un file XML nella cartella res/drawable):

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

E utilizzare questo selettore nella vostra ListView:

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

Questo è tutto. Funziona almeno con Android 2.2-2.3.

+0

Grazie! Questi bug pre 3.0/4.0 sono davvero fastidiosi, perché non sono affatto documentati! –

+0

Vorrei aver trovato questo post ore prima. Nota, puoi farlo anche a livello di codice: 'ShapeDrawable sd = new ShapeDrawable (new RectShape()); . Sd.getPaint() setColor (Color.RED); listview.setSelector (sd); ' –

1

Se non si desidera modificare il selettore, è anche possibile impostarlo come sfondo del layout dell'elemento di elenco, anziché nel campo listSelector di ListView. Le voci dell'elenco ricevono lo stato "selezionato" quando viene toccato e il colore viene visualizzato correttamente.

Questo funziona per tutte le versioni di Android.

Es: Questo è vostro elenco di elementi di layout

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

e la vostra lista senza selettore di lista:

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