Подтвердить что ты не робот

Прокрутка ListView изменяет все: от белого до черного

У меня есть собственное представление списка, и я хочу, чтобы фон списка был белым, поэтому я делаю что-то вроде этого, которое отлично работает.

listView = (ListView) this.findViewById(R.id.listview);
listView.setBackgroundColor(Color.WHITE);

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

Я попробовал в своем списке, установив цвет фона на белый. Когда я раздувал представление, я также попытался установить цвет фона на белый:

view.setBackgroundColor(Color.WHITE);

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

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

Спасибо!

4b9b3361

Ответ 1

Решение очень просто, вам также нужно установить подсказку цвета кеша в белый цвет: setCacheColorHint(Color.WHITE). Вам не нужно менять цвет фона элементов списка.

Ответ 2

ListView lv = getListView();
setCacheColorHint(0);

Установите подсказку цвета кеша в ноль.

Ответ 3

Решение очень простое, вам также нужно установить подсказку цвета кеша на черный в xml.

android:cacheColorHint="#000000"

Ответ 4

Android пытается повысить производительность прокрутки ListView путем кэширования информации о макете. Если у вас есть длинные списки прокрутки данных, вы также должны установить свойство android: cacheColorHint в объявлении ListView в определении Activity AXML (с тем же значением цвета, что и ваш собственный фон раскладки строк). Невозможность включить этот подсказку может привести к "мерцанию", когда пользователь прокручивает список с пользовательскими цветами фона строки. Так что дайте тот же цвет фон listitem и android: cacheColorHint.You можете ссылаться ниже кода.

В моем макете адаптера я дал как

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ADAPTER_CONTAINER_PRIMARY"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FAFAEE"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:gravity="center">
     .....

И в представлении "Список"

<ListView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@+id/LIST_GRID_LIST_INSTANCES"
            android:focusableInTouchMode="true"     
            android:smoothScrollbar="true"
            android:divider="@drawable/Gray"
            android:dividerHeight="0.05dp"
            android:cacheColorHint="#FAFAEE"
            android:background="@drawable/round"/>

Ответ 5

Если ваш ListView нарисован поверх более сложного фона - скажем, растрового изображения или градиента - тогда вам может потребоваться полностью отключить кеш прокрутки. Я решил установить android:scrollingCache="false" на мой ListView, чтобы решить эту проблему.

http://developer.android.com/reference/android/widget/AbsListView.html#attr_android:scrollingCache