Фон ListView стає чорним під час прокрутки


427

Я створив специфічний Список, який існує із наведених нижче елементів, щоб створити список, який можна прокручувати, з кожним рядком, що містить зображення з лівої сторони та текст з правого боку:

Для початку макет "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>

а потім у ListView я розміщую такий елемент "рядок":

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

Поки екран відображається статично (як ні в якому русі), він буде відображатися правильно, але коли я почне прокручувати список, рядок-елемент рядка ("значок", як це може бути показано в коді) буде показано правильно, але фон «кореневого» макета стане повністю чорним ... коли прокрутка зупиниться, фон, в більшості випадків, поверне свій колір ... Оскільки я тестую, я також додав TextViewу цей кореневий елемент з тим самим фоном, цей затримує його колір, коли список прокручується ... Будь-яка ідея, чому це відбувається, і як це вирішити?

Відповіді:


771

Додайте атрибут у ListViewТег

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

Для отримання більш детальної інформації перегляньте цей блог


23
this.getListView (). setCacheColorHint (0); З компонування я не зміг встановити колір. Але мені вдалося це зробити за допомогою наведеного вище коду. Я використовував цей код у "onCreate" діяльності зі списком. Сподіваюся, що ця інформація також допомагає.
Дійо Давід

70
android:cacheColorHint="#0000"також працює, якщо ви боїтеся нулів.
Андрій

136
Або також android:cacheColorHint="@android:color/transparent"якщо ви боїтеся цифр :)
матовий

2
@android: кольоровий / прозорий, ймовірно, має додатковий бонус за встановлення одного єдиного біта. Існує помилка, якщо, якщо ви перейдете 0 на деяких телефонах, прозорість не буде працювати. Тому фокус - встановити 1 біт.
Томас Дігнан

63

Дуже просто, просто використовуйте цей рядок у вашому файлі макета:

android:scrollingCache="false"

подобається це:

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

2
Це працює, але я не думаю, що робити це розумно: stackoverflow.com/questions/15570041/scrollingcache
Morten Holmgaard

1
У мене був випадок, коли android: cacheColorHint = "# 00000000" не працював, але android: scrollingCache = "false" зробив. Дякую.
Яр

27

ви можете використовувати так:

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

У нас є маса варіантів цієї проблеми, ви можете встановити фон як прозорий за допомогою програмування, як

yourlistview.setCacheColorHint(Color.TRANSPARENT); 

або через xml

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

5

У вашому xml, де використовувати Listviewнабір

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

5

Я використовую зображення, listViewі він стає чорним іноді в samsung s4, навіть не прокручуючи. Це була дурна помилка, яку я зробив у перехіднику. Я просто ставлю свій погляд на нуль, щоб виправити цю проблему

 @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

На це питання є багато відповідей, але сьогодні я зрозумів, що це питання все ще не вистачає критичної інформації.

Є два можливі рішення проблеми, обидва працюють, але кожне слід використовувати в різних ситуаціях.


Методи

Використовуйте, android:cacheColorHintколи фон ListViewмає суцільний кольоровий фон.

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

Використовуйте, android:scrollingCacheколи у вас ListViewє (складне) зображення як тло.

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

Примітка

Коли у вас ListViewє суцільний кольоровий фон, обидва способи працюватимуть, тому не тільки cacheColorHintволя буде працювати. Але не рекомендується використовувати scrolingCacheметод для однотонних фонів, оскільки він вимикає метод оптимізації, який використовується для плавної анімації та прокрутки ListView.

Примітка для замітки: scrolingCache встановлення значення false не обов'язково означає ListView, що анімація анімації і прокрутка стане повільною.




Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.