Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (3)

Наибольший вклад в теги

Все теги (10)

Лучшие ответы пользователя

Все ответы (4)
  • Android: ListView — разноцветные items?

    Allesad
    @Allesad
    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, чтобы не создавать его каждый раз, но это частности.
    Ответ написан
    2 комментария
  • POST-запрос к Хабру в Android?

    Allesad
    @Allesad Автор вопроса
    Ура, нашел в чем проблема — действительно в хедерах. Добавил хедер Referer и все заработало правильно. Видать, на хабре стоит валидация источника запроса.
    Ответ написан
    Комментировать
  • Существует ли плагин для браузера для комментирования Хабра?

    Allesad
    @Allesad
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (3)