ListView alternative row color-Get disappear after scroll

1

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;

     }}
    }
android
asked on Stack Overflow Mar 14, 2012 by Arun • edited Aug 23, 2018 by buræquete

1 Answer

3

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;
answered on Stack Overflow Mar 14, 2012 by waqaslam

User contributions licensed under CC BY-SA 3.0