2012-06-12 40 views
12

Parece que tengo un problema de IU con una vista de lista. Tengo una vista de lista y selecciono cualquier elemento de la lista, resalta la vista de lista completa. La selección funciona bien, obtengo el elemento correcto en el oyente.Lista de Android vista toda la lista siendo seleccionada

Pero el problema es que cuando selecciono cualquier elemento, se resalta toda la vista de lista, por lo que es difícil saber qué fila fue seleccionada.

Esto funciona bien en Android> 3.1 - Actualmente estoy probando en 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> 

Respuesta

-3

i fijo mediante la eliminación de esta línea: (no estoy seguro por qué funcionó)

androide: listSelector = "# 99000000"

26

Recientemente tuve el mismo problema, pero la razón estaba en Android < 3.0 error: si configura un @color como dibujable para su selector presionado elemento de lista, entonces llenará toda el área de la lista. La solución es usar un drawable 'forma' en lugar de @color.

Por lo tanto, crear un nuevo archivo XML en res/drawable carpeta con contenido similar:

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

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

y disponibles referencia creado en su selector de ListView para state_pressed (también creado como un archivo XML en res/drawable carpeta):

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

Y utilizar este selector en su ListView:

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

Eso es todo. Funciona al menos con Android 2.2-2.3.

+0

Gracias! Estos errores previos a 3.0/4.0 son realmente molestos, ¡porque no están documentados en absoluto! –

+0

Desearía haber encontrado esta publicación horas antes. Tenga en cuenta que también puede hacerlo programáticamente: 'ShapeDrawable sd = new ShapeDrawable (new RectShape()); sd.getPaint(). setColor (Color.RED); listview.setSelector (sd); ' –

1

Si no desea cambiar el selector, también puede establecerlo como fondo del diseño del elemento de la lista, en lugar de en el campo listSelector de ListView. Los elementos de la lista reciben el estado "seleccionado" cuando se tocan y el color se muestra correctamente.

Esto funciona para todas las versiones de Android.

Ej: Esta es la lista de diseño elemento

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

y su lista sin selector de lista:

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