Ответ 1
Решение очень просто, вам также нужно установить подсказку цвета кеша в белый цвет: setCacheColorHint(Color.WHITE)
. Вам не нужно менять цвет фона элементов списка.
У меня есть собственное представление списка, и я хочу, чтобы фон списка был белым, поэтому я делаю что-то вроде этого, которое отлично работает.
listView = (ListView) this.findViewById(R.id.listview);
listView.setBackgroundColor(Color.WHITE);
Проблема заключается в том, что при прокрутке списка фон всех элементов списка изменяется на черный, что выглядит ужасно.
Я попробовал в своем списке, установив цвет фона на белый. Когда я раздувал представление, я также попытался установить цвет фона на белый:
view.setBackgroundColor(Color.WHITE);
Обе эти проблемы устраняют проблему цвета фона прокрутки, но теперь элемент не кажется кликабельным, даже если он есть. Я имею в виду, что onClick все еще работает нормально, но фон не мигает оранжевым, чтобы пользователь знал, что он щелкнул его.
Как я могу получить белый фон в представлении списка, который остается белым во время прокрутки, а обычный оранжевый цвет фона обычного списка?
Спасибо!
Решение очень просто, вам также нужно установить подсказку цвета кеша в белый цвет: setCacheColorHint(Color.WHITE)
. Вам не нужно менять цвет фона элементов списка.
ListView lv = getListView();
setCacheColorHint(0);
Установите подсказку цвета кеша в ноль.
Решение очень простое, вам также нужно установить подсказку цвета кеша на черный в xml.
android:cacheColorHint="#000000"
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"/>
Если ваш ListView
нарисован поверх более сложного фона - скажем, растрового изображения или градиента - тогда вам может потребоваться полностью отключить кеш прокрутки. Я решил установить android:scrollingCache="false"
на мой ListView
, чтобы решить эту проблему.
http://developer.android.com/reference/android/widget/AbsListView.html#attr_android:scrollingCache