Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Android [игнор отключен] [закрыт для гостей] / Передача HashSet<Object1,List<Object2>> в BaseExpandableListAdapter для ExpandableListView / 7 сообщений из 7, страница 1 из 1
16.07.2016, 19:45
    #39275135
Arvalon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача HashSet<Object1,List<Object2>> в BaseExpandableListAdapter для ExpandableListView
Доброго дня.
Пишу кастомный адаптер, унаследованный от 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?
...
Рейтинг: 0 / 0
16.07.2016, 20:02
    #39275139
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача HashSet<Object1,List<Object2>> в BaseExpandableListAdapter для ExpandableListView
в чем проблема завернуть, в удобный для тебя список ?
...
Рейтинг: 0 / 0
16.07.2016, 20:04
    #39275140
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача HashSet<Object1,List<Object2>> в BaseExpandableListAdapter для ExpandableListView
ты можешь использовать хоть

ArrayList<Group>

где

class Group
{
private String GroupName;
private ArrayList<Items> items;
...
}


да как угодно и зачем там тебе HashSet
...
Рейтинг: 0 / 0
16.07.2016, 20:07
    #39275142
Arvalon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача HashSet<Object1,List<Object2>> в BaseExpandableListAdapter для ExpandableListView
Джибс,

Но в качестве ключа опять же объект?
...
Рейтинг: 0 / 0
16.07.2016, 20:15
    #39275143
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача HashSet<Object1,List<Object2>> в BaseExpandableListAdapter для ExpandableListView
ArvalonДжибс,

Но в качестве ключа опять же объект?

почему ?

ArrayList<Group> groups= ...

groups.get(1).items.get(1) ...
...
Рейтинг: 0 / 0
16.07.2016, 20:23
    #39275146
Arvalon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача HashSet<Object1,List<Object2>> в BaseExpandableListAdapter для ExpandableListView
Джибс,

Так, это будет ArrayList<ArrayList<Group>> ?
И класс Group, идущий в childItem может содержать всё что мне нужно.
Но заголовок групп будет иметь только номер! Т.е. можно будет вычислить только номер вложенного ArrayList'a. А если необходимо в заголовке групп иметь не только цифру или текст, а ещё элемент (маленькую картинку, символ группы), то ArrayList не подходит. В нём же только элементы по номерам.
...
Рейтинг: 0 / 0
16.07.2016, 22:17
    #39275157
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача HashSet<Object1,List<Object2>> в BaseExpandableListAdapter для ExpandableListView
а если подумать ?
...
Рейтинг: 0 / 0
Форумы / Android [игнор отключен] [закрыт для гостей] / Передача HashSet<Object1,List<Object2>> в BaseExpandableListAdapter для ExpandableListView / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]