it-swarm.com.ru

Фон ListView становится черным при прокрутке

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

Чтобы начать с "корневого" макета:

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

421
TiGer

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

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

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

769
Praveen

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

Android:scrollingCache="false"

как это:

<ListView 
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:scrollingCache="false"
/>
62
Mahesh

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

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

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

yourlistview.setCacheColorHint(Color.TRANSPARENT); 

или через xml

Android:cacheColorHint="@Android:color/transparent"
6
Sampath Kumar

Я использую изображения в listView, и иногда он становится черным в Samsung S4, даже не прокручивая. Это была глупая ошибка, которую я сделал в адаптере. Я просто поставил свой view to 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);
             } 
        }
4
Ahmad Arslan

Есть много ответов на этот вопрос, но сегодня я понял, что этот вопрос до сих пор не хватает важной информации.

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


методы

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

3
Rolf ツ

В вашем xml, где использовать Listview set

    Android:cacheColorHint="@Android:color/transparent"
3
jeet parmar
Android:cacheColorHint="@Android:color/transparent"
1
muditagarwal88

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

myListView.setScrollingCacheEnabled(false);
1
Lazy Ninja

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

или же

не установить фон listview.

0
Akshay Paliwal