Ответ 1
Добавить атрибут в теге ListView
android:cacheColorHint="#00000000" // setting transparent color
Подробнее... этот блог
Я создал конкретный Список, который существует из следующих элементов, чтобы создать прокручиваемый список с каждой строкой, содержащей изображение слева, и некоторый текст с правой стороны:
Чтобы начать с макета "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 я поместил следующий элемент "row":
<?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
в этом корневом элементе с тем же фоном, который задерживает его при прокрутке списка...
Любая идея, почему это происходит, и как это решить?
Добавить атрибут в теге ListView
android:cacheColorHint="#00000000" // setting transparent color
Подробнее... этот блог
Очень просто использовать эту строку в вашем файле макета:
android:scrollingCache="false"
вот так:
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollingCache="false"
/>
вы можете использовать следующее:
list.setCacheColorHint(Color.TRANSPARENT);
list.requestFocus(0);
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"/>
У нас есть много вариантов этой проблемы, вы можете установить фон как прозрачный с помощью программирования, например
yourlistview.setCacheColorHint(Color.TRANSPARENT);
или через xml
android:cacheColorHint="@android:color/transparent"
Я использую изображения в 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);
}
}
Есть ответы на этот вопрос, но сегодня я понял, что этот вопрос по-прежнему не содержит важной информации.
Существует два возможных решения проблемы: оба работают, но каждый из них должен использоваться в разных ситуациях.
Методы
Используйте 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
и прокрутка станут медленными.
В вашем xml, где использовать Listview
set
android:cacheColorHint="@android:color/transparent"
android:cacheColorHint="@android:color/transparent"
Следующие работали для меня:
myListView.setScrollingCacheEnabled(false);
android:cacheColorHint="#00000000"// setting transparent color
или
не устанавливать фон listview
.