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?

Jawaban:


771

Tambahkan atribut pada ListViewTag

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

Untuk lebih jelasnya periksa blog ini


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

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

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

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"

5

Di xml Anda, di mana harus menggunakan Listviewset

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

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);
             } 
        }

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.



2

Berikut ini bekerja untuk saya:

myListView.setScrollingCacheEnabled(false);

1

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

atau

jangan mengatur latar belakang listview.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.