Альтернативные цвета элемента в ListView - PullRequest
2 голосов
/ 09 декабря 2011

Я пытаюсь изменить цвет элемента списка в Android, но не могу заставить его работать. Я хочу, чтобы цвета чередовались ... Я сделал свой собственный адаптер, и внутри метода 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;
}
}

Конечно, я определил colorPar и colorImpar внутри моего собственного ресурса colors.xml.

Есть идеи, почему это не работает ??

Спасибо!

Ответы [ 3 ]

2 голосов
/ 09 декабря 2011

Похоже, фон по умолчанию для вида прозрачный. Попробуйте это, и это должно работать ..

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 голос
/ 09 декабря 2011

Используйте setBackgroundResource() вместо setBackgroundColor().

setBackgroundResource() принимает в качестве параметра целочисленный индекс ресурса и загружает любой ресурс, на который указывает этот индекс (например, рисуемый объект, строка или, в вашем случае, цвет).

setBackgroundColor(), однако принимает целое число, представляющее цвет. То есть не color-resource , а прямое шестнадцатеричное значение rgba (0xAARRGGBB).

Поэтому, когда вы вызываете setBackgroundColor () с использованием индекса ресурса (скажем, 7f050001, который является первым индексом цвета), вы всегда устанавливаете свой цвет a: 127 r: 5 g: 0 b: 1.

0 голосов
/ 21 февраля 2018

Если у вас есть более одного или двух свойств, которые вы хотите изменить для альтернативного или любого другого дополнительного макета, в следующем посте описывается, как применять отдельные макеты на основе индекса элемента. Просто переопределите методы getViewTypeCount и getViewType (или в свойстве Xamarin ViewTypeCount и метод GetViewType)

ссылки:

Android ListView с несколькими макетами

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...