ListView替代行颜色 - 滚动后消失

时间:2012-03-14 07:21:02

标签: android

我有一个带有图片和textview的listview,我正在为名为MyArrayAdaptor的类中的列表视图应用替代行颜色,该类扩展了ArrayAdapter<String>

当列表视图首先加载时,会出现替代的行颜色,但在滚动列表视图项后,颜色混合得更快,这是第二种颜色覆盖第一种颜色。

我该如何处理这个案子?

班级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;

     }}
    }

1 个答案:

答案 0 :(得分:3)

我认为你应该将你的背景颜色设置在if(rowView == null)条件之外。例如:在return rowView;

之上
...

rowView.setBackgroundColor((position%2 == 0)? colors[0] : colors[1]);

return rowView;