2010-06-10 11 views
51

Tengo una vista de lista personalizada y quiero que el fondo de la lista sea blanco, por lo que hago algo como esto que funciona muy bien.Desplazar un ListView cambia todo, desde Blanco a Negro

listView = (ListView) this.findViewById(R.id.listview); 
listView.setBackgroundColor(Color.WHITE); 

El problema es que cuando se desplaza por la lista, el fondo de todos los elementos de la lista cambia a negro, lo que se ve horrible.

Intenté en mi vista de lista establecer el color de fondo en blanco. Cuando inflar el punto de vista también he intentado establecer el color de fondo a blanco:

view.setBackgroundColor(Color.WHITE); 

Ambos se soluciona el problema del color de fondo de desplazamiento, pero ahora el tema no parece que se pueda hacer clic a pesar de que es. Lo que quiero decir con eso es que onClick todavía funciona bien, pero el fondo no cambia a naranja para que el usuario sepa que hizo clic.

¿Cómo puedo tener un fondo blanco en una vista de lista, que se mantiene en blanco mientras se desplaza, y la lista normal aparece en naranja haciendo clic en el fondo?

Gracias!

Respuesta

118

La solución es muy simple, también necesita establecer la sugerencia de color de la memoria caché en blanco: setCacheColorHint(Color.WHITE). No necesita cambiar el color de fondo de los elementos de la lista.

+1

Eso funcionó a la perfección. listView = (ListView) this.findViewById (R.id.listview); listView.setBackgroundColor (Color.WHITE); listView.setCacheColorHint (Color.WHITE); – pcm2a

+36

listView.setCacheColorHint (Color.TRANSPARENTE); o android: cacheColorHint = "# 00000000" // Reutilizar el color de fondo – CelinHC

+0

transparente no funcionó, blanco hizo – max4ever

6

La solución es muy simple, también debe establecer la sugerencia de color de la memoria caché en negro en xml.

android:cacheColorHint="#000000" 
7
ListView lv = getListView(); 
setCacheColorHint(0); 

Establecer la insinuación de color caché a cero.

+0

¡Este es el indicado! –

3

Android intenta mejorar el rendimiento del desplazamiento de ListView almacenando en caché la información de diseño. Si tiene largas listas de desplazamiento de datos, también debe establecer la propiedad android: cacheColorHint en la declaración ListView en la definición AXML de la actividad (con el mismo valor de color que el fondo de su diseño de fila personalizado). Si no se incluye esta sugerencia, podría producirse un "parpadeo" a medida que el usuario se desplaza por una lista con colores de fondo de fila personalizados. Proporcione el mismo color al fondo de la lista y android: cacheColorHint.puede consultar el siguiente código.

En mi diseño del adaptador dia como

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/ADAPTER_CONTAINER_PRIMARY" 
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="#FAFAEE" 
android:layout_marginLeft="5dp" 
android:layout_marginRight="5dp" 
android:gravity="center"> 
    ..... 

Y en la vista Lista

<ListView 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:id="@+id/LIST_GRID_LIST_INSTANCES" 
      android:focusableInTouchMode="true"  
      android:smoothScrollbar="true" 
      android:divider="@drawable/Gray" 
      android:dividerHeight="0.05dp" 
      android:cacheColorHint="#FAFAEE" 
      android:background="@drawable/round"/> 
+0

Gran explicación – Sababado

Cuestiones relacionadas