Фон ListView становится черным при прокрутке - PullRequest
421 голосов
/ 14 мая 2010

Я создал специальный список, который существует из следующих элементов, чтобы создать прокручиваемый список, в котором каждая строка содержит изображение с левой стороны и некоторый текст с правой стороны:

Для начала «корневая» раскладка:

<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 в этот корневой элемент с тем же фоном, этот будет задерживать его цвет при прокрутке списка ... Есть идеи, почему это происходит, и как это решить?

Ответы [ 11 ]

769 голосов
/ 14 мая 2010

Добавить атрибут к тегу ListView

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

Для более подробной информации проверьте этот блог

62 голосов
/ 22 ноября 2012

Это очень просто, просто используйте эту строку в файле макета:

android:scrollingCache="false"

как это:

<ListView 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollingCache="false"
/>
26 голосов
/ 30 августа 2012

вы можете использовать так:

list.setCacheColorHint(Color.TRANSPARENT);
list.requestFocus(0);
8 голосов
/ 14 декабря 2012

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"/>
6 голосов
/ 18 марта 2014

У нас есть много вариантов для этой проблемы, вы можете установить прозрачный фон при программировании, как

yourlistview.setCacheColorHint(Color.TRANSPARENT); 

или через xml

android:cacheColorHint="@android:color/transparent"
4 голосов
/ 02 июля 2015

Я использую изображения в listView, и иногда в samsung s4 он становится черным, даже не прокручивая. Это была глупая ошибка, которую я сделал в адаптере. Я просто установил для моего представления значение null , чтобы исправить эту проблему

 @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);
             } 
        }
3 голосов
/ 27 июня 2015

В вашем XML, где использовать Listview установить

    android:cacheColorHint="@android:color/transparent"
3 голосов
/ 29 октября 2014

На этот вопрос имеется множество ответов, но сегодня я понял, что в этом вопросе все еще отсутствует важная информация.

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


Методы

Используйте 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 и прокрутка станут медленными.

1 голос
/ 01 февраля 2016

У меня сработало следующее:

myListView.setScrollingCacheEnabled(false);
1 голос
/ 28 ноября 2014
android:cacheColorHint="@android:color/transparent"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...