53 votes

Faire défiler un ListView change tout du blanc au noir

J'ai une liste personnalisée de vue et je veux l'arrière-plan de la liste blanche, si je fais quelque chose comme ce qui fonctionne très bien.

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

Le problème, c'est lorsque vous faites défiler la liste à l'arrière-plan de tous les éléments de la liste des changements au noir, qui semble horrible.

J'ai essayé dans ma liste vue réglage de la couleur d'arrière-plan en blanc. Quand j'ai fait gonfler la vue j'ai aussi essayé le réglage de la couleur d'arrière-plan blanc:

view.setBackgroundColor(Color.WHITE);

Ces deux résoudre le problème du défilement de la couleur d'arrière-plan, mais maintenant, le point ne semble pas être cliquable, même si elle est. Ce que je veux dire par là, c'est le onClick fonctionne toujours très bien, mais le fond n'a pas de flash à l'orange pour permettre à l'utilisateur de savoir qu'il a cliqué.

Comment puis-je avoir un fond blanc dans une vue de liste, qui reste blanc pendant le défilement, et ne la liste normale acitvity orange cliquez sur arrière-plan?

Merci!

118voto

Romain Guy Points 57114

La solution est très simple. Vous devez également définir l'indicateur de couleur du cache sur blanc: setCacheColorHint(Color.WHITE) . Vous n'avez pas besoin de changer la couleur d'arrière-plan des éléments de la liste.

7voto

Sababado Points 1174
 ListView lv = getListView();
setCacheColorHint(0);
 

Définissez l'indicateur de couleur de cache sur zéro.

6voto

Google Points 1446

La solution est très simple, vous devez également définir l’indicateur de couleur de cache sur noir en XML.

 android:cacheColorHint="#000000"
 

3voto

Tiru Points 232

Android des tentatives pour améliorer les performances de ListView défilement en mettant en cache les informations de mise en page. Si vous avez longtemps le défilement des listes de données, vous devez également définir le le android:cacheColorHint biens sur la liste de déclaration d'Activité de AXML définition (à la même valeur de la couleur de votre ligne de la disposition de l'arrière-plan). Omission de cette indication pourrait entraîner un "scintillement", comme l'utilisateur fait défiler une liste avec ligne personnalisée des couleurs de fond. Afin de lui donner la même couleur pour le listitem de l'arrière-plan et android:cacheColorHint.vous pouvez consulter ci-dessous le code.

Dans mon Adaptateur de mise en page que j'ai donné comme

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

Et dans la vue de Liste

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

1voto

Leo Accend Points 222

Si votre ListView est dessiné sur un arrière-plan plus complexe (un bitmap ou un dégradé, par exemple), vous devrez peut-être entièrement désactiver le cache de défilement. J'ai fini par régler android:scrollingCache="false" sur mon ListView pour résoudre ce problème.

http://developer.android.com/reference/android/widget/AbsListView.html#attr_android:scrollingCache

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X