web-dev-qa-db-fra.com

Arrière-plan ListView devient noir lors du défilement

J'ai créé une liste spécifique qui existe à partir des éléments suivants pour créer une liste déroulante avec chaque ligne contenant une image à gauche et du texte à droite:

Pour commencer avec une mise en page "racine":

<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical"
    Android:layout_width="fill_parent" 
    Android:layout_height="fill_parent"
    Android:background="#C8C8C8"
    >
    <TextView
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"/>
    <ListView
        Android:id="@Android:id/list"
        Android:layout_width="fill_parent" 
        Android:layout_height="fill_parent"
        Android:drawSelectorOnTop="false"
        Android:divider="#C8C8C8"
        Android:background="#C8C8C8"/>
</LinearLayout>

puis, dans ListView, je place l'élément "row" suivant:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:orientation="horizontal"
    Android:background="@drawable/bg_row"
>
    <ImageView
        Android:layout_width="wrap_content"
        Android:paddingLeft="10px"
        Android:paddingRight="15px"
        Android:paddingTop="5px"
        Android:paddingBottom="5px"
        Android:layout_height="wrap_content"
        Android:src="@drawable/bg_image"
    />
    <TextView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:paddingTop="5px"
        Android:paddingBottom="5px"
        Android:textSize="16sp"
        Android:textColor="#000000"
        Android:layout_gravity="center"
        Android:maxHeight="50px"/>
</LinearLayout>

Tant que l'écran est affiché de manière statique (comme dans aucun mouvement), il sera affiché correctement, mais lorsque je commence à faire défiler la liste, l'arrière-plan de l'élément de ligne (une "icône", comme indiqué dans le code) sera affiché. s'affiche correctement, mais l'arrière-plan de la disposition "racine" deviendra complètement noir ... lorsque le défilement s'arrête, l'arrière-plan retrouve la plupart du temps sa couleur ... Lors de mon test, j'ai également ajouté un TextView dans cet élément racine avec le même arrière-plan, celui-ci conservera sa couleur lorsque la liste défilera ... Vous avez une idée du pourquoi, et comment résoudre ce problème?

421
TiGer

Ajouter un attribut à la balise ListView

Android:cacheColorHint="#00000000" // setting transparent color

Pour plus de détails, consultez ce blog

769
Praveen

C'est très simple, utilisez cette ligne dans votre fichier de mise en page:

Android:scrollingCache="false"

comme ça:

<ListView 
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:scrollingCache="false"
/>
62
Mahesh

vous pouvez utiliser comme ceci:

list.setCacheColorHint(Color.TRANSPARENT);
list.requestFocus(0);
26
nikki
Android:id="@Android:id/list"
Android:layout_width="fill_parent" 
Android:layout_height="fill_parent"
Android:drawSelectorOnTop="false"
Android:divider="#C8C8C8"
Android:background="#C8C8C8"
Android:cacheColorHint="#00000000"/>
8
AnDx

Nous avons beaucoup d’options pour résoudre ce problème, vous pouvez définir l’arrière-plan transparent via une programmation comme celle-ci.

yourlistview.setCacheColorHint(Color.TRANSPARENT); 

ou par xml

Android:cacheColorHint="@Android:color/transparent"
6
Sampath Kumar

J'utilise des images dans listView et il devient parfois noir dans le Samsung S4 sans défilement même. C'était une erreur stupide que j'ai faite dans l'adaptateur. Je viens de mettre mon view to null pour résoudre ce problème

 @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Holder holder;
            convertView = null; // convert view should be null
            if (convertView == null) {
                holder = new Holder();
                convertView = inflater1.inflate(R.layout.listview_draftreport_item, null);
             } 
        }
4
Ahmad Arslan

Il y a beaucoup de réponses à cette question, mais aujourd'hui, j'ai réalisé que cette question manquait encore d'un élément d'information essentiel.

Il existe deux solutions possibles au problème, les deux fonctionnent, mais chacune d’elles doit être utilisée dans des situations différentes.


Méthodes

Utilisez Android:cacheColorHint lorsque votre ListView a un arrière-plan de couleur solide .

<item name="Android:cacheColorHint">@Android:color/transparent</item>

Utilisez Android:scrollingCache lorsque votre ListView a une image (complexe) comme arrière-plan.

<item name="Android:scrollingCache">false</item>

Remarque

Lorsque votre ListView a un arrière-plan de couleur unie, les deux méthodes fonctionneront, ainsi non seulement le cacheColorHint fonctionnera. Toutefois, il n'est pas recommandé d'utiliser la méthode scrolingCache pour les arrière-plans de couleur unie, car elle désactive une méthode d'optimisation utilisée pour une animation et un défilement fluides de ListView.

Remarque pour la remarque:scrolingCache défini sur false ne signifie pas nécessairement que les animations et le défilement de ListView deviendront lents.

3
Rolf ツ

Dans votre XML où utiliser Listview set

    Android:cacheColorHint="@Android:color/transparent"
3
jeet parmar
Android:cacheColorHint="@Android:color/transparent"
1
muditagarwal88

Ce qui suit a fonctionné pour moi:

myListView.setScrollingCacheEnabled(false);
1
Lazy Ninja

Android:cacheColorHint="#00000000"// setting transparent color

ou

ne pas définir le fond de listview.

0
Akshay Paliwal