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

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

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

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

16.07.2016, 16:05. Просмотров 108. Ответов 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
Посмотрите здесь:
Какой адаптер нужен для кастомного ExpandableListView Android
Android Android: как оптимизировать код для ExpandableListView
Что лучше использовать для смс чата для отображения текстов и рисунков Android
Android Адаптер для GridView
Android ExpandableListView
ExpandableListView Android
Android ExpandableListView не скролит
Android Прослушать ExpandableListView
OnClick ExpandableListView Android
Android Как создать адаптер для Gallery?
Адаптер для списка сообщений мессенджера Android
Android Expandablelistview совместно с listview

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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