I have created a specific List which exists out of the following elements to create a scrollable list with every row containing a Image on the left side and some text on the right side:
To begin with a "root" layout :
<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>
and then within the ListView I place the following "row" item :
<?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?
Add an attribute on the ListView
Tag
android:cacheColorHint="#00000000" // setting transparent color
For more details check this blog
It's very simple just use this line in your layout file :
android:scrollingCache="false"
like this:
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollingCache="false"
/>
you can use like this:
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"/>
We have plenty of options for this problem, you can set the background as transparent through programming like
yourlistview.setCacheColorHint(Color.TRANSPARENT);
or through xml
android:cacheColorHint="@android:color/transparent"
In your xml where to use Listview
set
android:cacheColorHint="@android:color/transparent"
I am using images in listView
and it turns black sometimes in samsung s4 not even scrolling. It was a stupid mistake which I have done in the adapter.I just put my view to null to fix this issue
@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);
}
}
There are allot of answers to this question but today I realized this question is still missing a critical piece of information.
There are two possible solutions for the problem, both work but each should be used in different situations.
Methods
Use android:cacheColorHint
when your ListView
has a solid color background.
<item name="android:cacheColorHint">@android:color/transparent</item>
Use android:scrollingCache
when your ListView
has a (complex) image as background.
<item name="android:scrollingCache">false</item>
Note
When your ListView
has a solid color background both methods will work, so not only the cacheColorHint
will work. But it's not recommended to use the scrolingCache
method for solid color backgrounds since it turns off an optimization method used for smooth animating and scrolling the ListView.
Note for the note: scrolingCache
set to false does not necessarily mean the ListView
's animations and scrolling will become slow.
android:cacheColorHint="@android:color/transparent"
The following worked for me:
myListView.setScrollingCacheEnabled(false);
android:cacheColorHint="#00000000"// setting transparent color
or
don't set background of listview
.
Add an attribute
android:cacheColorHint="#00000000" //transparent color
Success story sharing
android:cacheColorHint="#0000"
also works if you're afraid of zeros.android:cacheColorHint="@android:color/transparent"
if you're afraid of numbers :)