我已经创建了一个特定的列表,它存在于以下元素中,以创建一个可滚动的列表,每一行都包含左侧的图像和右侧的一些文本:

从“根”布局开始:

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

As long as the screen is shown statically (as in no movement) it will be shown correctly, but when I start scrolling through the list the background of the row-item (an "icon" as can be shown in the code) will be shown correctly but the background of the "root" layout will become completely black... when the scrolling stops the background will, most of the times, get back its color... As I test I also added a TextView in that root-element with the same background, this one will detain it's color when the List is scrolled... Any idea why this is happening, and how to solve this?


当前回答

添加属性

android:cacheColorHint="#00000000" //透明颜色

其他回答

对于这个问题我们有很多的选项,你可以通过编程把背景设置为透明的

yourlistview.setCacheColorHint(Color.TRANSPARENT); 

或者通过XML

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

下面的方法对我很有效:

myListView.setScrollingCacheEnabled(false);

这个问题有很多答案,但今天我意识到这个问题仍然缺少一个关键的信息。

这个问题有两种可能的解决方案,两种都有效,但每一种都适用于不同的情况。


方法

当你的ListView有纯色背景时,使用android:cacheColorHint。

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

使用android:scrollingCache当你的ListView有一个(复杂)图像作为背景。

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

Note

当你的ListView有纯色背景时,这两种方法都可以工作,所以不仅仅是cacheColorHint可以工作。但是不建议对纯色背景使用scrolingCache方法,因为它关闭了用于平滑动画和滚动ListView的优化方法。

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

我在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);
             } 
        }