滚动时背景ListView变黑

我创build了一个特定的列表,它存在于以下元素之外,用于创build一个滚动列表,每行包含一个左侧的图像和右侧的一些文本:

要开始“根”布局:

<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> 

只要屏幕静态显示(如不移动),它将被正确显示,但是当我开始滚动列表时,行项目的背景(可以显示在代码中的“图标”)将是显示正确,但“根”布局的背景将变成完全黑色的…当滚动停止背景将大部分时间,取回它的颜色…正如我testing我还添加了一个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"/> 

我们有很多这个问题的select,你可以通过编程将背景设置为透明

 yourlistview.setCacheColorHint(Color.TRANSPARENT); 

或通过XML

 android:cacheColorHint="@android:color/transparent" 

这个问题有很多答案,但是今天我意识到这个问题仍然缺less一个重要的信息。

对于这个问题有两种可能的解决scheme ,两种都可以,但是每种都应该在不同的情况下使用。


方法

ListView具有纯色背景时,请使用android:cacheColorHint

 <item name="android:cacheColorHint">@android:color/transparent</item> 

当您的ListView有一个(复杂) 图像作为背景时,请使用android:scrollingCache

 <item name="android:scrollingCache">false</item> 

注意

当你的ListView有一个纯色背景时,两个方法都可以工作,所以不仅cacheColorHint可以工作。 但不推荐使用纯色背景的scrolingCache方法,因为它closures了用于平滑animation和滚动ListView的优化方法。

注意注意:将 scrolingCache设置为false并不一定意味着ListView的animation和滚动会变慢。

我在listView使用图像,有时甚至在三星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); } } 

在你的xml里使用Listview设置

  android:cacheColorHint="@android:color/transparent" 

以下为我工作:

 myListView.setScrollingCacheEnabled(false); 
 android:cacheColorHint="@android:color/transparent" 

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

要么

不要设置listview背景。