Вопрос: Android: ListView — разноцветные items?

Лучший ответ: PVOID задал справедливый вопрос — зачем хранить в адаптере вьюшки? Это совершенно не рациональное использование ресурсов. По сути, все что вам нужно знать — тип текущего элемента листа. По этому типу вы можете устанавливать фон нужного цвета.

Пример:
1) Создаем статичный класс (опционально статичный, можно куда-нибудь запихать в нагрузку) со всеми цветами — скажем, ListColors.

public class ListColors {
    public static final Integer RED      = 0;
    public static final Integer GREEN    = 1;
    public static final Integer BLUE     = 2;
    public static final Integer YELLOW   = 3;
    public static final Integer PURPLE   = 4;
}


2) Создаем класс, описывающий элемент списка — ListItem. Тут важно свойство type, которое будет хранить тип элемента. А типом элемента будет любая из констант класса ListColors.

class ListItem {
    private Long id;
    private Integer type;

    public ListItem(Long id, Integer type){
        this.id     = id;
        this.type   = type;
    }

    public Long getId(){
        return id;
    }

    public Integer getType(){
        return type;
    }
}


3) Далее пишем сам адаптер, в конструктор которого будет передаваться Context (никогда не помешает) и список элементов в формате List<ListItem>.

class TestAdapter extends BaseAdapter implements ListAdapter {

    private Context context;
    private List<ListItem> items;

    public TestAdapter(Context context, List<ListItem> items){
        this.context    = context;
        this.items      = items;
    }

    @Override
    public int getCount() {
        return items.size();
    }

    @Override
    public ListItem getItem(int position) {
        return items.get(position);
    }

    @Override
    public long getItemId(int position) {
        return items.get(position).getId();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ListItem item = getItem(position);
        convertView = LayoutInflater.from(context).inflate(R.layout.list_row_item, null);

        LinearLayout layout = (LinearLayout) convertView.findViewById(R.id.view_background);

        Integer colorRes;
        switch (item.getType())
        {
            default:
            case ListColors.RED:
                colorRes = context.getResources().getColor(R.id.red);
                break;
            case ListColors.GREEN:
                colorRes = context.getResources().getColor(R.id.green);
                break;
            case ListColors.BLUE:
                colorRes = context.getResources().getColor(R.id.blue);
                break;
            case ListColors.YELLOW:
                colorRes = context.getResources().getColor(R.id.yellow);
                break;
            case ListColors.PURPLE:
                colorRes = context.getResources().getColor(R.id.purple);
                break;
        }
        layout.setBackgroundColor(colorRes);
        return convertView;
    }
}


В методе getView() мы получаем элемент списка, получаем базовый layot элемента списка (в данном случае типа LinearLayout), затем проверяем тип элемента и присваиваем layout'y нужный цвет. Можно еще хранить view элемента списка в holder'e, чтобы не создавать его каждый раз, но это частности.

Худший ответ: А почему бы не сохранять информацию о состоянии строки через settag/gettag?