Парсинг HashMap<Obj1,List<Obj2>> в BaseExpandableListAdapter
Добавлено: 16 июл 2016, 20:11
Доброго дня.
Пишу кастомный адаптер, унаследованный от BaseExpandableListAdapter для заполнения ExpandableListView. В адаптер передаётся коллекция HashMap, ключём в которой является объект. Это не специально, так получилось т.к. я захотел что бы у заголовков групп был не только текст, но и картинка. И простой int или String в качестве ключа уже не подходит. Соответственно получилось:
Адаптер
И тут, ещё не добравшись до "сложных" методов getGroupView и getChildView, с которыми ещё придётся повозиться, настал полный ступор. C getGroupCount разобрался, но не понимаю что писать в
А в некоторых ещё и int childPosition, но с этим по идее понятно. Ведь значениями у ключей моей HashMap является коллекция, реализующая интерфейс List, там "на первый-второй рассчитайся" можно сделать, перечисляемая коллекция.
Но у меня нет номера ключа коллекции HashMap, откуда его взять вообще?
Класс объектов, используемого в качестве ключа - MuscleGroup
В принципе в нём есть поле ID - оно 100% уникально т.к. это первичный ключ из БД. Можно использовать его под groupPosition, сделать проброс из класса ключа в адаптер? Что-то говорит что что могут быть проблемы если это хоть как-то заработает вообще. Например если у последовательности в БД, формирующий это ID, будут "дырки" после удаления-добавления записей.
В кратце, как нумеровать ключи в HasMap?
Пишу кастомный адаптер, унаследованный от BaseExpandableListAdapter для заполнения ExpandableListView. В адаптер передаётся коллекция HashMap, ключём в которой является объект. Это не специально, так получилось т.к. я захотел что бы у заголовков групп был не только текст, но и картинка. И простой int или String в качестве ключа уже не подходит. Соответственно получилось:
Адаптер
Код: Выделить всё
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;
}
}
- getChildrenCount
- getGroup
- getChild
- getGroupId
- getChildId
- isChildSelectable
А в некоторых ещё и int childPosition, но с этим по идее понятно. Ведь значениями у ключей моей HashMap является коллекция, реализующая интерфейс List, там "на первый-второй рассчитайся" можно сделать, перечисляемая коллекция.
Но у меня нет номера ключа коллекции HashMap, откуда его взять вообще?
Класс объектов, используемого в качестве ключа - MuscleGroup
Код: Выделить всё
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;
}
}
В кратце, как нумеровать ключи в HasMap?