it-swarm.com.de

Hintergrund ListView wird beim Scrollen schwarz

Ich habe eine spezifische Liste erstellt, die aus den folgenden Elementen besteht, um eine scrollbare Liste mit jeder Zeile zu erstellen, die ein Bild auf der linken Seite und Text auf der rechten Seite enthält:

Um mit einem "Root" -Layout zu beginnen:

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

und dann platziere ich in der ListView das folgende "Zeilen" -Element:

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

Solange der Bildschirm statisch angezeigt wird (wie bei keiner Bewegung), wird er korrekt angezeigt. Wenn ich jedoch mit dem Scrollen durch die Liste beginne, wird der Hintergrund des Zeilenelements (ein "Symbol", wie es im Code angezeigt werden kann) angezeigt richtig angezeigt, aber der Hintergrund des "Root" -Layouts wird komplett schwarz ... wenn das Scrollen aufhört, wird der Hintergrund die meiste Zeit wieder seine Farbe annehmen ... Beim Testen habe ich auch ein TextView hinzugefügt In diesem Root-Element mit demselben Hintergrund behält dieses Element seine Farbe bei, wenn die Liste gescrollt wird. Irgendeine Idee, warum dies geschieht, und wie dies zu lösen ist?

421
TiGer

Fügen Sie dem Tag ListView ein Attribut hinzu

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

Weitere Informationen finden Sie unter dieses Blog

769
Praveen

Es ist sehr einfach, verwenden Sie einfach diese Zeile in Ihrer Layout-Datei:

Android:scrollingCache="false"

so was:

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

sie können wie folgt verwenden:

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

Wir haben viele Möglichkeiten für dieses Problem, Sie können den Hintergrund durch Programmierung wie transparent einstellen

yourlistview.setCacheColorHint(Color.TRANSPARENT); 

oder durch xml

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

Ich verwende Bilder in listView und es wird manchmal schwarz in Samsung s4 nicht einmal scrollen. Es war ein dummer Fehler, den ich im Adapter gemacht habe. Ich habe einfach mein Ansicht auf null gesetzt, um dieses Problem zu beheben

 @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

Es gibt viele Antworten auf diese Frage, aber heute habe ich festgestellt, dass dieser Frage immer noch eine wichtige Information fehlt.

Es gibt zwei mögliche Lösungen für das Problem, beide funktionieren, aber jede sollte in unterschiedlichen Situationen verwendet werden.


Methoden

Verwenden Android:cacheColorHint wenn Ihr ListView einen einfarbigen Hintergrund hat.

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

Verwenden Android:scrollingCache wenn Ihr ListView ein (komplexes) Bild als Hintergrund hat.

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

Hinweis

Wenn Ihr ListView einen einfarbigen Hintergrund hat, funktionieren beide Methoden, sodass nicht nur das cacheColorHint funktioniert. Es wird jedoch nicht empfohlen, die scrolingCache -Methode für einfarbige Hintergründe zu verwenden, da sie eine Optimierungsmethode deaktiviert, mit der die ListView reibungslos animiert und gescrollt werden kann.

Hinweis für den Hinweis:scrolingCache auf false gesetzt bedeutet nicht unbedingt, dass die Animationen und das Scrollen des ListView langsam werden.

3
Rolf ツ

In Ihrer XML, wo Listview gesetzt werden soll

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

Folgendes hat für mich funktioniert:

myListView.setScrollingCacheEnabled(false);
1
Lazy Ninja

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

oder

nicht Hintergrund von listview setzen.

0
Akshay Paliwal