ListView中的备用项颜色

时间:2011-12-08 22:13:07

标签: android android-layout

我正在尝试更改android中listview的项目颜色,但我无法使其工作。我希望颜色交替...我已经制作了自己的适配器,并且在getView方法中我在返回列表视图之前更改了颜色但是它不起作用我不知道为什么......

这是我的代码:

public class EventoAdapter extends ArrayAdapter<Evento>{
    Context context;
    int layoutResourceId;
    ArrayList<Evento> evento = null;


public EventoAdapter(Context context, int textViewResourceId,
        ArrayList<Evento> objects) {
    super(context, textViewResourceId, objects);
    // TODO Auto-generated constructor stub

    this.layoutResourceId = textViewResourceId;
    this.context = context;
    this.evento = objects;

}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    View row = convertView;
    EventoHolder holder = null;

    if(row == null){
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new EventoHolder();
        holder.nombre = (TextView)row.findViewById(R.id.nombreEvento);
        holder.total = (TextView)row.findViewById(R.id.totalEvento);  
        holder.moneda = (TextView)row.findViewById(R.id.moneda);
        holder.fecha = (TextView)row.findViewById(R.id.fecha);
        row.setTag(holder);

    }else{
        holder = (EventoHolder)row.getTag();
    }


    Evento ev = evento.get(position);

    holder.nombre.setText(ev.getNombre());
    holder.total.setText(Integer.toString(ev.getTotal()));
    holder.moneda.setText("$");
    holder.fecha.setText("20/12/11");



    if(position%2==0){
        row.setBackgroundColor(R.color.colorPar);
    }else{
        row.setBackgroundColor(R.color.colorImpar);
    }

    return row;
}



static class EventoHolder{
    TextView nombre;
    TextView total;
    TextView moneda;
    TextView fecha;
}
}

我当然在自己的colors.xml资源中定义了colorPar和colorImpar。

任何想法为什么这不起作用?

谢谢!

3 个答案:

答案 0 :(得分:2)

看起来视图的默认背景是透明的。试试这个,它应该工作..

if(position%2==0){
    row.setBackgroundColor(new 
       ColorDrawable(context.getResources().getColor(R.color.colorPar)));
}else{
    row.setBackgroundColor(new 
       ColorDrawable(context.getResources().getColor(R.color.colorImpar)));
}

答案 1 :(得分:1)

使用setBackgroundResource()而不是setBackgroundColor()

setBackgroundResource()将整数资源索引作为参数,并加载索引指向的任何资源(例如,一个drawable,一个字符串或在您的情况下是一个颜色)。

然而,setBackgroundColor()采用表示颜色的整数。也就是说,不是 color-resource ,而是直接的十六进制rgba值(0xAARRGGBB)。

因此,当您使用资源索引(例如7f050001,这是第一个颜色索引)调用setBackgroundColor()时,您始终将颜色设置为:127 r:5 g:0 b:1。

答案 2 :(得分:-1)

如果您希望为备用或任何其他布局更改一个或两个属性,则以下帖子将介绍如何根据项目索引应用单独的布局。 只需覆盖getViewTypeCountgetViewType方法(或Xamarin ViewTypeCount属性和GetViewType方法)

链接:

  

Android ListView with multiple layouts

     

https://developer.xamarin.com/api/property/Android.Widget.BaseAdapter.ViewTypeCount/