Получение черного экрана при прокрутке в ListView на Android

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

1-й формат XML: –

<?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="fill_parent" android:orientation="vertical" android:padding="7dp" > <TextView android:id="@+id/item_title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="2dp" android:textColor="#000000" android:textAppearance="?android:attr/textAppearanceMedium" android:textSize="20dp" /> <TextView android:id="@+id/item_subtitle" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#000000" android:padding="2dp" android:textAppearance="?android:attr/textAppearanceMedium" android:textSize="13dp" /> 

Второй макет 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="#FFFFFF"> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:drawSelectorOnTop="false" /> <TextView android:id="@android:id/empty" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="No data" android:textColor="#000000" /> 

Код, где я использовал эти макеты: –

 ListAdapter adapter = new SimpleAdapter(this, HomeMenuActivity.mylist , R.layout.listdata, new String[] { "Name", "Vicinity" }, new int[] { R.id.item_title, R.id.item_subtitle }); setListAdapter(adapter); lv = getListView(); lv.setTextFilterEnabled(true); 

У меня есть статический arraylist «mylist», который имеет данные. Пожалуйста, если кто-нибудь знает, почему он показывает черный экран во время прокрутки, пожалуйста, направляйте меня.

Спасибо lv.setOnItemClickListener (это);

Я полностью согласен со всеми перечисленными выше ответами, но позвольте мне дать вам эту информацию:

В ListView есть прозрачный / полупрозрачный фон по умолчанию, и поэтому все виджеты по умолчанию в наборе инструментов Android UI. Это означает, что когда ListView перерисовывает своих детей, он должен смешивать детей с фоном окна. Еще раз, это требует дорогостоящих обращений к памяти из памяти, которые особенно болезненны во время прокрутки или броска, когда рисование происходит десятка раз в секунду.

Чтобы улучшить производительность чертежа во время операций прокрутки, платформа Android повторно использует подсказку в отношении цвета кеша. Когда этот намек установлен, среда копирует каждый дочерний элемент списка в битмап, заполненный значением подсказки (при условии, что другая оптимизация, называемая прокруткой кеша, не отключается). ListView затем сбрасывает эти растровые изображения непосредственно на экране, и поскольку эти растровые изображения, как известно, непрозрачны, смешение не требуется. Кроме того, поскольку указатель цвета кеша по умолчанию – # 191919, вы получаете темный фон позади каждого элемента во время прокрутки.

Чтобы исправить эту проблему, все, что вам нужно сделать, это либо отключить оптимизацию подсказок кеш-цвета, если вы используете не сплошной цвет фона, либо установите подсказку на соответствующее значение сплошного цвета. Вы можете сделать это из кода (см. setCacheColorHint(int) ) или предпочтительно из XML, используя атрибут android: cacheColorHint. Чтобы отключить оптимизацию, просто используйте прозрачный цвет # 00000000. На следующем скриншоте показан список с android:cacheColorHint="#00000000" установленный в файле макета XML

Для получения дополнительной информации: Android ListView Optimization

Решение:

Вы можете использовать android:cacheColorHint="@android:color/transparent" или android:cacheColorHint="#00000000"

Вы должны установить это в своем списке:

 android:cacheColorHint="#00000000" 

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

Просто добавьте атрибут цветной подсказки в список.

  <ListView android:layout_height="wrap_content" android:layout_width="match_parent" android:cacheColorHint="@android:color/transparent" /> 

Добавьте одно свойство в тег listview в своем макете

 android:cacheColorHint="#00000000" 

После этого он должен работать.

Попробуйте этот код и установите цвет в соответствии с вашим требованием:

 String arr[]=new String[]{"a","bv"}; ListView lv; protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); lv=(ListView)findViewById(R.id.lv1); ArrayAdapterad=newArrayAdapter(getApplicationContext(),R.layout.check_it,R.id.txt_color,ar); lv.setAdapter(ad); } 
 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:layout_width="match_parent" android:layout_height="250dp" android:id="@+id/lv1" android:background="#000" android:scrollingCache="false"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#fff" android:id="@+id/txt_color"/>