Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
arvalon
21 / 6 / 2
Регистрация: 26.10.2012
Сообщений: 158
Записей в блоге: 1
#1

Передача HashSet<Object1,List<Object2>> в адаптер BaseExpandableListAdapter для отображения ExpandableListView - Программирование Android

16.07.2016, 16:05. Просмотров 111. Ответов 0
Метки нет (Все метки)

Доброго дня.
Пишу кастомный адаптер, унаследованный от BaseExpandableListAdapter для заполнения ExpandableListView. В адаптер передаётся коллекция HashSet, ключём в которой является объект. Это не специально, так получилось т.к. я захотел что бы у заголовков групп был не только текст, но и картинка. И простой int или String в качестве ключа уже не подходит. Соответственно получилось:

Адаптер
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
public class AddMusclesToExerciseAdapter extends BaseExpandableListAdapter {
 
Context ctx;
Map<MuscleGroup,List<Muscle>> musclesByGroups=new HashMap<>();
 
    public AddMusclesToExerciseAdapter(Context context, Map<MuscleGroup, List<Muscle>> inputMap){
 
        ctx=context;
        musclesByGroups=inputMap;
    }
 
    @Override
    public int getGroupCount() {
        return musclesByGroups.size();
    }
 
    @Override
    public int getChildrenCount(int groupPosition) {
        return 0;
    }
 
    @Override
    public Object getGroup(int groupPosition) {
        return null;
    }
 
    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return null;
    }
 
    @Override
    public long getGroupId(int groupPosition) {
        return 0;
    }
 
    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return 0;
    }
 
    @Override
    public boolean hasStableIds() {
        return false;
    }
 
    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        return null;
    }
 
    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        return null;
    }
 
    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return false;
    }
}


И тут, ещё не добравшись до "сложных" методов getGroupView и getChildView, с которыми ещё придётся повозиться, настал полный ступор. C getGroupCount разобрался, но не понимаю что писать в
  • getChildrenCount
  • getGroup
  • getChild
  • getGroupId
  • getChildId
  • isChildSelectable
Ведь во всех них на вход подаётся int groupPosition!
Кликните здесь для просмотра всего текста

А в некоторых ещё и int childPosition, но с этим по идее понятно. Ведь значениями у ключей моей HashMap является коллекция, реализующая интерфейс List, там "на первый-второй рассчитайся" можно сделать, перечисляемая коллекция.

Но у меня нет номера ключа коллекции HashSet, откуда его взять вообще?

Класс объектов, используемого в качестве ключа - MuscleGroup
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
public class MuscleGroup {
    private int id;
    private String name;
    private int power;
    private byte[] img;
    private String description;
 
    public MuscleGroup(int id, String name, int power, byte[] img, String description) {
        this.id = id;
        this.name = name;
        this.power = power;
        this.img = img;
        this.description = description;
    }
 
    public String getDescription() {
        return description;
    }
 
    public void setDescription(String description) {
        this.description = description;
    }
 
    public int getId() {return id;}
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public byte[] getImg() {
        return img;
    }
 
    public void setImg(byte[] img) {
        this.img = img;
    }
 
    public int getPower() {
        return power;
    }
 
    public void setPower(int power) {
        this.power = power;
    }
 
    @Override
    public int hashCode(){
        return getId();
    }
 
    @Override
    public boolean equals(Object o) {
        if ((o!=null) && (o instanceof MuscleGroup)) {
            if (this.getId()==((MuscleGroup) o).getId()) return true;
        }
        return false;
    }
}

В принципе в нём есть поле ID - оно 100% уникально т.к. это первичный ключ из БД. Можно использовать его под groupPosition, сделать проброс из класса ключа в адаптер? Что-то говорит что что могут быть проблемы если это хоть как-то заработает вообще. Например если у последовательности в БД, формирующий это ID, будут "дырки" после удаления-добавления записей.

В кратце, как нумеровать ключи в HashSet?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2016, 16:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача HashSet<Object1,List<Object2>> в адаптер BaseExpandableListAdapter для отображения ExpandableListView (Программирование Android):

Какой адаптер нужен для кастомного ExpandableListView - Программирование Android
Доброго дня. Мне нужно отобразить данные в виде сворачивающегося списка. Нашёл подходящий ListView для этого - ExpandableListView. Но...

Android: как оптимизировать код для ExpandableListView - Программирование Android
как заполнить ExpandableListView при помощи строкового массива ? Имеется ввиду из готовой StringArray как на картинке вот...

Сравнение List, Dictionary, Hashset - C#
Здравствуйте! Подскажите, где можно узнать про колекции List, Dictionary, Hashset такие вещи как: 1) алгоритмы их работы 2)...

Загрузить ListView из HashSet (ну или простого List) - C#
По итерации цикла в строковое множество закладывается по две разных строки их всегда четное количество. Как их разделить эти строки по...

Передача Грида для заполнения и отображения - C#
Возникла проблема c DataGridView и как всегда обращение к экспертам )). Есть форма ЖурналДокументов по кнопке редактировать выделен. Док....

Обсуждение HashSet, в частности- хранит HashSet объекты отсортированными или нет? - Java
Что-то я не могу понять. Смотрите, мне надо запихать 10000 случайных элементов типа Integer в порядке их генерирования в HashSet, а потом...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2016, 16:05
Привет! Вот еще темы с ответами:

Wi-fi адаптер нет отображения в системе - Wi-Fi
Ноутбук Lenovo Z575 wi-fi адаптер не отображается в системе. Клавиши Fn+F5 выдает устройство Bluetoth и нет в устройства wi-fi. В БИОСе...

Метод для HashSet - C#
Доброго времени суток! Хочу узнать если какой то метод на подобии: IndexOf (Естественно для HashSet) Заранее спасибо.

Передача list<> в функцию - C++
Извините, а можно как нибудь передать list без названия в функцию, если да то можно маленький пример. Например, у нас есть 3 листа и...

Передача std::list<> в функцию - C++
Нужно передать список строк в функцию. У меня сделано так: void f(list&lt;string&gt;&amp; list1) {...} т.е. по ссылке передаю ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru