web-dev-qa-db-ja.com

スクロールすると背景の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="#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>

次に、リストビュー内に次の「行」アイテムを配置します。

<?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も追加されました。同じ背景を持つ要素、これはリストがスクロールされたときにその色を保持します...これが起こっている理由、およびこれを解決する方法はありますか?

421
TiGer

ListViewタグに属性を追加します

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

詳細については このブログ を確認してください

769
Praveen

レイアウトファイルで次の行を使用するだけで非常に簡単です。

Android:scrollingCache="false"

このような:

<ListView 
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:scrollingCache="false"
/>
62
Mahesh

次のように使用できます:

list.setCacheColorHint(Color.TRANSPARENT);
list.requestFocus(0);
26
nikki
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"/>
8
AnDx

この問題には多くのオプションがあり、次のようなプログラミングを通じて背景を透明に設定できます

yourlistview.setCacheColorHint(Color.TRANSPARENT); 

またはxmlを介して

Android:cacheColorHint="@Android:color/transparent"
6
Sampath Kumar

listViewで画像を使用していますが、サムスンs4ではスクロールしなくても時々黒くなります。この問題を解決するために、アダプタで行ったのは愚かな間違いでした。view to 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);
             } 
        }
4
Ahmad Arslan

この質問に対する答えはたくさんありますが、今日、この質問にはまだ重要な情報が欠けていることに気付きました。

問題には2つの解決策があります。両方とも機能しますが、それぞれ異なる状況で使用する必要があります。


メソッド

ListViewsolid色の背景がある場合は、Android:cacheColorHintを使用します。

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

ListViewに背景として(複雑な)imageがある場合は、Android:scrollingCacheを使用します。

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

注意

ListViewの背景が単色の場合、両方のメソッドが機能するため、cacheColorHintだけが機能するわけではありません。しかし、ListViewのスムーズなアニメーション化とスクロールに使用される最適化メソッドをオフにするため、scrolingCacheメソッドを無地の背景に使用することはお勧めしません。

注の注:scrolingCacheをfalseに設定しても、必ずしもListViewのアニメーションとスクロールが遅くなるわけではありません。

3
Rolf ツ

Listview setを使用するxmlの場所

    Android:cacheColorHint="@Android:color/transparent"
3
jeet parmar
Android:cacheColorHint="@Android:color/transparent"
1
muditagarwal88

次は私のために働いた:

myListView.setScrollingCacheEnabled(false);
1
Lazy Ninja

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

または

しないlistviewの背景を設定します。

0
Akshay Paliwal