I have a listview
with an image and a textview and I am applying alternative row color for the list view in my class named MyArrayAdaptor
which extends ArrayAdapter<String>
When the listview loads first, the alternative row color appears, but after I scroll the listview items a bit faster the color get mixed, that is the second color overrides the first color.
How can I handle this case?
the class MyArrayAdaptor
;
public class MyArrayAdaptor extends ArrayAdapter<String> {
private Activity context;
private String[] text1;
private String[] image1;
private int TextViewID;
private int ImageViewID;
private int LoyoutID;
//private int[] colors = new int[] { 0xFFFFFFFF, 0xb2b2b2FF };
// private int[] colors = new int[] { 0x30FF0000, 0x300000FF };
private int[] colors = new int[] { 0x30FF0000, 0x30000000 };
public MyArrayAdaptor(Activity context,int id, String[] text1,String[] image,int textViewID, int imageViewID) {
super(context,id, text1);
this.context = context;
this.text1 = text1;
this.image1=image;
this.TextViewID=textViewID;
this.ImageViewID=imageViewID;
this.LoyoutID=id;
}
// static to save the reference to the outer class and to avoid access to
// any members of the containing class
static class ViewHolder {
public ImageView imageView;
public TextView textView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// ViewHolder will buffer the assess to the individual fields of the row
// layout
ViewHolder holder;
View rowView = convertView;
if (rowView == null) {
LayoutInflater inflater = context.getLayoutInflater();
rowView = inflater.inflate(LoyoutID, null, true);
//color
if (position % 2 == 0) {
rowView.setBackgroundColor(colors[0]);
}
else {
rowView.setBackgroundColor(colors[1]);
}
holder = new ViewHolder();
holder.textView = (TextView) rowView.findViewById(TextViewID);
holder.imageView = (ImageView) rowView.findViewById(ImageViewID);
rowView.setTag(holder);
} else {
holder = (ViewHolder) rowView.getTag();
}
holder.textView.setText(text1[position]);
//holder.imageView.setImageDrawable(LoadImageFromWebOperations(image[position]));
holder.imageView.setBackgroundResource(R.drawable.icon);
return rowView;
}
private Drawable LoadImageFromWebOperations(String url)
{
try
{
InputStream is = (InputStream) new URL(url).getContent();
Drawable d = Drawable.createFromStream(is, "src name");
return d;
}catch (Exception e) {
System.out.println("Exc="+e);
return null;
}}
}
i think you should set your background color outside if(rowView == null)
condition. For example: just above return rowView;
...
rowView.setBackgroundColor((position%2 == 0)? colors[0] : colors[1]);
return rowView;
User contributions licensed under CC BY-SA 3.0