ListView in background diventa nero durante lo scorrimento


427

Ho creato un elenco specifico esistente tra i seguenti elementi per creare un elenco scorrevole con ogni riga contenente un'immagine sul lato sinistro e del testo sul lato destro:

Per iniziare con un layout "radice":

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

e poi all'interno di ListView inserisco la seguente voce "riga":

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

Finché lo schermo viene mostrato staticamente (come in nessun movimento) verrà mostrato correttamente, ma quando comincio a scorrere l'elenco lo sfondo dell'elemento di riga (un'icona come si può vedere nel codice) sarà mostrato correttamente ma lo sfondo del layout "radice" diventerà completamente nero ... quando lo scorrimento si interrompe, lo sfondo, nella maggior parte dei casi, ritorna al suo colore ... Durante il test ho anche aggiunto un TextViewelemento in quell'elemento radice con lo stesso sfondo, questo manterrà il suo colore quando si fa scorrere l'elenco ... Qualche idea sul perché questo accada e come risolverlo?

Risposte:


771

Aggiungi un attributo al ListViewtag

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

Per maggiori dettagli consulta questo blog


23
. this.getListView () setCacheColorHint (0); Dal layout non sono riuscito a impostare il colore. Ma sono riuscito a farlo con il codice sopra. Ho usato questo codice in "onCreate" dell'attività dell'elenco. Spero che questa informazione sia di aiuto.
Dijo David,

70
android:cacheColorHint="#0000"funziona anche se hai paura degli zeri.
Andrew,

136
O anche android:cacheColorHint="@android:color/transparent"se hai paura dei numeri :)
decidi il

2
@android: color / transparent ha probabilmente il vantaggio di avere un singolo bit impostato. C'è un bug in cui se si passa 0 su alcuni telefoni la trasparenza non funzionerà. Quindi il trucco è impostare 1 bit.
Thomas Dignan,

63

È molto semplice basta usare questa linea nel tuo file di layout:

android:scrollingCache="false"

come questo:

<ListView 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollingCache="false"
/>

2
Funziona, ma non credo sia intelligente da fare: stackoverflow.com/questions/15570041/scrollingcache
Morten Holmgaard

1
Ho avuto un caso in cui android: cacheColorHint = "# 00000000" non ha funzionato, ma android: scrollingCache = "false" ha funzionato. Grazie.
Anno

27

puoi usare così:

list.setCacheColorHint(Color.TRANSPARENT);
list.requestFocus(0);

10

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

7

Abbiamo molte opzioni per questo problema, puoi impostare lo sfondo come trasparente attraverso la programmazione come

yourlistview.setCacheColorHint(Color.TRANSPARENT); 

o tramite xml

android:cacheColorHint="@android:color/transparent"

5

Nel tuo XML dove usare Listviewset

    android:cacheColorHint="@android:color/transparent"

5

Sto usando le immagini listViewe a volte diventa nero in Samsung S4 nemmeno a scorrimento. È stato uno stupido errore che ho fatto nell'adattatore. Ho appena messo la mia vista a zero per risolvere questo problema

 @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

Ci sono molte risposte a questa domanda, ma oggi ho capito che a questa domanda mancano ancora informazioni importanti.

Esistono due possibili soluzioni al problema, entrambe funzionano ma ognuna dovrebbe essere utilizzata in diverse situazioni.


metodi

Utilizzare android:cacheColorHintquando si ListViewha uno sfondo a tinta unita.

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

Utilizzare android:scrollingCachequando il tuo ListViewha un (complessa) immagine come sfondo.

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

Nota

Quando hai ListViewuno sfondo a tinta unita entrambi i metodi funzioneranno, quindi non solo cacheColorHintfunzionerà. Ma non è consigliabile utilizzare il scrolingCachemetodo per gli sfondi a tinta unita poiché disattiva un metodo di ottimizzazione utilizzato per animare e scorrere uniformemente ListView.

Nota per la nota: scrolingCache impostare su falso non significa necessariamente che le ListViewanimazioni e lo scorrimento diventeranno lenti.



2

Per me ha funzionato:

myListView.setScrollingCacheEnabled(false);

1

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

o

non impostare lo sfondo di listview.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.