Категоризация в ListView

Интерфейс, диалоги, темы, стили, меню
Lucifer777
Сообщения: 122
Зарегистрирован: 18 ноя 2013, 17:53

Категоризация в ListView

Сообщение Lucifer777 » 27 апр 2015, 17:39

Всем привет!
Интересует как сделать вот такой список:Изображение

Не знаю как так сделать, что бы название категории списка была на том же уровне, что и первая ячейка из этой категории.
Наткнулся на парочку библиотек, которые это позволяют но пахнет всё это каким-то страшными костылями. Как нативно это реализуется?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Категоризация в ListView

Сообщение Foenix » 27 апр 2015, 18:12

кастомный листвью, где слева картинка, буква, меняющая свою видимость. Очень простенько.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Lucifer777
Сообщения: 122
Зарегистрирован: 18 ноя 2013, 17:53

Re: Категоризация в ListView

Сообщение Lucifer777 » 27 апр 2015, 18:15

Foenix писал(а):кастомный листвью, где слева картинка, буква, меняющая свою видимость. Очень простенько.
не думал, что настолько простенько.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Категоризация в ListView

Сообщение Foenix » 27 апр 2015, 18:18

так а что сложного-то?
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Категоризация в ListView

Сообщение Mikhail_dev » 27 апр 2015, 19:35

а как убираются dividers между айтемами? Я пока сам особо не понял как это делается, хотя понятно что тут нет магии

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Категоризация в ListView

Сообщение Foenix » 27 апр 2015, 22:21

а там параметр был так как-то и назывался - дивайдерс=0 , в общем что-то такое
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Категоризация в ListView

Сообщение doter.ua » 27 апр 2015, 22:29

Mikhail_dev писал(а):а как убираются dividers между айтемами? Я пока сам особо не понял как это делается, хотя понятно что тут нет магии
android:divider="@null"
android:dividerHeight="0dp"
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Категоризация в ListView

Сообщение Mikhail_dev » 27 апр 2015, 22:34

Да я понимаю как его убрать, я не понимаю как его сделать чтобы он показывался в определенных случаях. Вы же видите что он есть, а в некоторых случаях его нет.

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Категоризация в ListView

Сообщение doter.ua » 27 апр 2015, 22:42

Mikhail_dev писал(а):Да я понимаю как его убрать, я не понимаю как его сделать чтобы он показывался в определенных случаях. Вы же видите что он есть, а в некоторых случаях его нет.
TextView
visibility gone
height 1dp
width match_parent
+ padding
----------------------------------
if ( bla bla ) tv.visibility=visible
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Категоризация в ListView

Сообщение Mikhail_dev » 27 апр 2015, 22:52

А, т.е. делаем скрытым дивайдеры у ListView, добавляем свою View как divider И там уже пользуемся условием. В принципе да, будет работать. Спасибо.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Категоризация в ListView

Сообщение Foenix » 27 апр 2015, 23:49

это не дивайдер, а полоска нарисованная, видно же что не сначала.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Lucifer777
Сообщения: 122
Зарегистрирован: 18 ноя 2013, 17:53

Re: Категоризация в ListView

Сообщение Lucifer777 » 28 апр 2015, 09:52

Foenix писал(а):так а что сложного-то?
Я предполагал, что добавили какой-нибудь метод/свойство/интерфейс который позволяет с таким header оформить список.

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Категоризация в ListView

Сообщение doter.ua » 28 апр 2015, 09:55

Lucifer777 писал(а):
Foenix писал(а):так а что сложного-то?
Я предполагал, что добавили какой-нибудь метод/свойство/интерфейс который позволяет с таким header оформить список.
Осваивай КастомныйАдаптер extends ArrayAdapter - пригодится не один раз.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Категоризация в ListView

Сообщение Mikhail_dev » 28 апр 2015, 10:37

А я всегда использую BaseAdapter. Посмотрел на ArrayAdapter, он по сути типизированный BaseAdapter, но я не понял как в нём данные изменять. Как это делается? К примеру мне пришла новая коллекция данных.

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Категоризация в ListView

Сообщение doter.ua » 28 апр 2015, 10:47

Mikhail_dev писал(а):А я всегда использую BaseAdapter. Посмотрел на ArrayAdapter, он по сути типизированный BaseAdapter, но я не понял как в нём данные изменять. Как это делается? К примеру мне пришла новая коллекция данных.
А как ты меняешь в BaseAdapter-е?
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Категоризация в ListView

Сообщение Mikhail_dev » 28 апр 2015, 11:04

Написал дополнительный метод setData, там подменяю коллекцию и notifyDataChanged вызываю

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Категоризация в ListView

Сообщение doter.ua » 28 апр 2015, 11:14

Mikhail_dev писал(а):Написал дополнительный метод setData, там подменяю коллекцию и notifyDataChanged вызываю
Ну тоже самое: в Активити меняешь\обновляешь коллекцию(аррей лист), которую передаешь в конструкторе. и вызываешь у адаптора нотифай... Если в адаптере, то в конструкторе нужно сохранить ссылку на коллекцию и создать отдельный метод для обновления как у БейзАдаптера.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Категоризация в ListView

Сообщение Mikhail_dev » 28 апр 2015, 11:18

Что значит тоже самое? =) я передаю в метод её, а в ArrayAdapter'e вы создаёте новый экземпляр адаптера, чтобы обновить данные. Это, извините, вообще разные вещи.

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Категоризация в ListView

Сообщение doter.ua » 28 апр 2015, 11:21

Пример:

Код: Выделить всё

public class MyClassAdapter extends ArrayAdapter<MyClass> {
    private Activity mActivity;
    private List<MyClass> list;

    public TenderAdapter(Activity activity, List<MyClass> list) {
        super(activity, R.layout.li_item_tender, list);
        this.mActivity = activity;
        this.list = list;
    }

    public class ViewHolder {
        public TextView tvName;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        final ViewHolder holder;
        View rowView = convertView;

        if (rowView == null) {
            LayoutInflater inflater = mActivity.getLayoutInflater();
            rowView = inflater.inflate(R.layout.li_item_tender, null, true);
            holder = new ViewHolder();

            holder.tvName= (TextView) rowView.findViewById(R.id.tvName);

            rowView.setTag( holder );
        } else {
            holder = (ViewHolder) rowView.getTag();
        }

        MyClass item = getItem(position);

        holder.tvName.setText( item.getName() );

        return rowView;
    }
}
П.С. где item- экзмепляр класса-контейнера, написанного спецом для адаптера
МайКласс (){
String name;
//getters setters constructors...
}
Никакие дополнительные методы типа гетКаунт гетОбдект и т.д. не нужны (добавляются по желанию).
В активити в конструктор адаптера передается (контекст, аррейлист<МайКласс>)
Последний раз редактировалось doter.ua 28 апр 2015, 11:25, всего редактировалось 1 раз.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Категоризация в ListView

Сообщение doter.ua » 28 апр 2015, 11:22

Mikhail_dev писал(а):Что значит тоже самое? =) я передаю в метод её, а в ArrayAdapter'e вы создаёте новый экземпляр адаптера, чтобы обновить данные. Это, извините, вообще разные вещи.
новый адаптер не создается, Просто изменяется дата аррейлиста и вызывается нотифай. Про передачу в конструкторе к тому, что передается ссылка, и можно менять исходный аррейлист (который передавался в конструкторе при создании) и обновления прокатят.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Ответить