Background ListView menjadi hitam saat menggulir

427

Saya telah membuat Daftar spesifik yang ada di luar elemen-elemen berikut untuk membuat daftar yang dapat digulir dengan setiap baris berisi Gambar di sisi kiri dan beberapa teks di sisi kanan:

Untuk memulai dengan tata letak "root":

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

dan kemudian di dalam ListView saya menempatkan item "baris" berikut:

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

Selama layar ditampilkan secara statis (seperti tidak bergerak) layar akan ditampilkan dengan benar, tetapi ketika saya mulai menggulir daftar, latar belakang item baris ("ikon" seperti yang dapat ditunjukkan dalam kode) akan ditampilkan ditampilkan dengan benar tetapi latar belakang tata letak "root" akan menjadi benar-benar hitam ... ketika gulir berhenti latar belakang akan, sebagian besar waktu, mendapatkan kembali warnanya ... Saat saya menguji saya juga menambahkan TextViewdalam elemen root-itu dengan latar belakang yang sama, yang satu ini akan menahan warnanya ketika Daftar sudah digulir ... Ada ide mengapa ini terjadi, dan bagaimana cara mengatasinya?

Harimau
sumber

Jawaban:

771

Tambahkan atribut pada ListViewTag

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

Untuk lebih jelasnya periksa blog ini

Praveen
sumber
23
this.getListView (). setCacheColorHint (0); Dari tata letak saya tidak bisa mengatur warna. Tetapi saya berhasil melakukannya dengan kode di atas. Saya telah menggunakan kode ini di 'onCreate' dari aktivitas daftar. Semoga informasi ini juga membantu.
Dijo David
70
android:cacheColorHint="#0000"juga berfungsi jika Anda takut nol.
Andrew
136
Atau juga android:cacheColorHint="@android:color/transparent"jika Anda takut nomor :)
Dule
2
@android: warna / transparan mungkin memiliki bonus tambahan karena memiliki satu set bit tunggal. Ada bug di mana jika Anda melewati 0 pada beberapa transparansi ponsel tidak akan berfungsi. Jadi triknya adalah mengatur 1 bit.
Thomas Dignan
63

Sangat sederhana, cukup gunakan baris ini di file tata letak Anda:

android:scrollingCache="false"

seperti ini:

<ListView 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollingCache="false"
/>
Mahesh
sumber
2
Ini berfungsi tetapi saya tidak berpikir itu pintar untuk dilakukan: stackoverflow.com/questions/15570041/scrollingcache
Morten Holmgaard
1
Saya punya kasus di mana android: cacheColorHint = "# 00000000" tidak berfungsi, tetapi android: scrollingCache = "false" berhasil. Terima kasih.
Yar
27

Anda dapat menggunakan seperti ini:

list.setCacheColorHint(Color.TRANSPARENT);
list.requestFocus(0);
nikki
sumber
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"/>
AnDx
sumber
7

Kami memiliki banyak opsi untuk masalah ini, Anda dapat mengatur latar belakang menjadi transparan melalui pemrograman seperti

yourlistview.setCacheColorHint(Color.TRANSPARENT); 

atau melalui xml

android:cacheColorHint="@android:color/transparent"
Sampath Kumar
sumber
5

Di xml Anda, di mana harus menggunakan Listviewset

    android:cacheColorHint="@android:color/transparent"
jeet parmar
sumber
5

Saya menggunakan gambar listViewdan kadang-kadang berubah menjadi hitam di samsung s4 bahkan tidak bergulir. Itu adalah kesalahan bodoh yang telah saya lakukan di adaptor. Saya hanya menempatkan pandangan saya ke nol untuk memperbaiki masalah ini

 @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);
             } 
        }
Ahmad Arslan
sumber
4

Ada banyak jawaban untuk pertanyaan ini, tetapi hari ini saya menyadari bahwa pertanyaan ini masih kehilangan informasi penting.

Ada dua solusi yang mungkin untuk masalah ini, keduanya berfungsi tetapi masing-masing harus digunakan dalam situasi yang berbeda.


Metode

Gunakan android:cacheColorHintsaat Anda ListViewmemiliki latar belakang warna solid .

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

Gunakan android:scrollingCacheketika Anda ListViewmemiliki (kompleks) gambar sebagai latar belakang.

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

Catatan

Ketika Anda ListViewmemiliki latar belakang warna solid kedua metode akan bekerja, jadi tidak hanya cacheColorHintakan berhasil. Tetapi tidak disarankan untuk menggunakan scrolingCachemetode untuk latar belakang warna solid karena mematikan metode optimisasi yang digunakan untuk animasi halus dan menggulir ListView.

Catatan untuk catatan: scrolingCache setel ke false tidak selalu berarti ListViewanimasi dan pengguliran akan menjadi lambat.

Rolf ツ
sumber
2
android:cacheColorHint="@android:color/transparent"
muditagarwal88
sumber
2

Berikut ini bekerja untuk saya:

myListView.setScrollingCacheEnabled(false);
Ninja malas
sumber
1

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

atau

jangan mengatur latar belakang listview.

Akshay Paliwal
sumber